C# での行区切り JSON (LDJSON) のシリアル化と逆シリアル化
オブジェクトを行区切りの JSON (LDJSON) 形式 (Google BigQuery データ準備で一般的に使用される) にシリアル化および逆シリアル化する必要がある場合、このプロセスを理解することが重要です。 LDJSON は、データを改行で区切られた一連の JSON オブジェクトとして表します。
LDJSON データを手動で解析する
Json.NET の JsonTextReader は、LDJSON データを手動で解析する方法を提供します。 JsonTextReader は、SupportMultipleContent フラグを true に設定することで、連続した JSON オブジェクトを処理できます。
最初の JSON 例 (単純なオブジェクト)
次の LDJSON データについて考えてみましょう:
<code>{"some":"thing1"} {"some":"thing2"} {"some":"thing3"}</code>
分析方法は以下のとおりです。
<code class="language-csharp">var json = "{\"some\":\"thing1\"}\r\n{\"some\":\"thing2\"}\r\n{\"some\":\"thing3\"}"; var jsonReader = new JsonTextReader(new StringReader(json)) { SupportMultipleContent = true // 允许多个JSON对象 }; var jsonSerializer = new JsonSerializer(); while (jsonReader.Read()) { var foo = jsonSerializer.Deserialize<foo>(jsonReader); }</code>
2 番目の JSON 例 (ネストされたオブジェクト)
より複雑な JSON の場合:
<code class="language-json">{"kind": "person", "fullName": "John Doe", "age": 22, "gender": "Male", "citiesLived": [{ "place": "Seattle", "numberOfYears": 5}, {"place": "Stockholm", "numberOfYears": 6}]} {"kind": "person", "fullName": "Jane Austen", "age": 24, "gender": "Female", "citiesLived": [{"place": "Los Angeles", "numberOfYears": 2}, {"place": "Tokyo", "numberOfYears": 2}]}</code>
同じアプローチを使用して、逆シリアル化された各オブジェクトをリストに追加します。
<code class="language-csharp">var json = "{...}"; // 定义JSON字符串 var jsonReader = new JsonTextReader(new StringReader(json)) { SupportMultipleContent = true }; var jsonSerializer = new JsonSerializer(); var listOfPeople = new List<person>(); while (jsonReader.Read()) { listOfPeople.Add(jsonSerializer.Deserialize<person>(jsonReader)); }</code>
注: Json.Net 10.0.4 以降では、カンマ区切りの JSON エントリもサポートされており、さらなる柔軟性が提供されます。
以上がC# で行区切り JSON (LDJSON) をシリアル化および逆シリアル化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。