Sérialisation et désérialisation de JSON délimité par des lignes (LDJSON) en C#
Comprendre ce processus est essentiel lorsque vous devez sérialiser et désérialiser des objets au format JSON (LDJSON) délimité par des lignes (couramment utilisé dans la préparation des données Google BigQuery). LDJSON représente les données sous la forme d'une série d'objets JSON délimités par des nouvelles lignes.
Analyser manuellement les données LDJSON
JsonTextReader dans Json.NET fournit un moyen d'analyser manuellement les données LDJSON. JsonTextReader peut gérer des objets JSON contigus en définissant l'indicateur SupportMultipleContent sur true.
Premier exemple JSON (objet simple)
Considérez les données LDJSON suivantes :
<code>{"some":"thing1"} {"some":"thing2"} {"some":"thing3"}</code>
La méthode d'analyse est la suivante :
<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>
Deuxième exemple JSON (objet imbriqué)
Pour un JSON plus complexe :
<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>
En utilisant la même approche, ajoutez chaque objet désérialisé à la liste :
<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>
Remarque : Json.Net 10.0.4 et supérieur prend également en charge les entrées JSON séparées par des virgules, offrant une flexibilité supplémentaire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!