JSON.NET problème pour parser données
Bonjour,
J'aimerais mettre tout un JSON dans un Dictionary<String, String>, il s'agit d'un fichier de données assez volumineux pouvant contenir objet/tableau et parfois des objets dans des objets, etc
Les tableaux doivent former une chaîne de caractère chacun des éléments séparés par un |, exemple:
Citation:
clé: cars
valeur: Ford|BMW|Fiat
Je me suis fais un JSON de test
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| {
"product": "test",
"version": 3,
"releaseDate": "2014",
"demo": true,
"cars": [
"Ford",
"BMW",
"Fiat"
],
"person": {
"id": 12345,
"name": "Guillaume",
"phones": {
"home": "0223456789",
"mobile": "0723456789"
},
"email": [
"email@outlook.fr",
"email@gmail.com"
],
"dateOfBirth": "1995",
"preferedColours": [
"Green",
"Blue"
]
}
} |
et un projet en C# contenant une classe "parser":
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
class parser
{
private JObject document;
public parser(JObject pDocument)
{
this.document = pDocument;
}
private String jArrayToString(JArray arrayJson)
{
String data = "";
foreach (object item in arrayJson)
{
data += item.ToString() + "|";
}
return data;
}
public Dictionary<String, String> doIt()
{
Dictionary<String, String> result = new Dictionary<String, String>();
foreach (var property in document.Properties())
{
if (property.Value is JValue) //si c'est une valeur brut
{
result.Add(property.Name, property.Value.ToString());
}
else if (property.Value is JArray) //si c'est un array -> jArrayToString
{
result.Add(property.Name, jArrayToString((JArray)property.Value));
}
else if (property.Value is JObject) //faudrait voir pour fonction récursive ?
{
foreach (var x in property.Value)
{
result.Add(((JProperty)(x)).Name, ((JProperty)(x)).Value.ToString());
}
}
}
return result;
}
} |
je récupère le json parsé de cette façon:
Code:
1 2 3 4 5 6
| parser Parser = new parser(JObject.Parse(tbJson.Text));
Dictionary<String, String> data = Parser.doIt();
foreach (KeyValuePair<string, string> kvp in data)
{
Console.WriteLine("{0}:{1}", kvp.Key, kvp.Value);
} |
ce qui donne:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| product:test
version:3
releaseDate:2014
demo:True
cars:Ford|BMW|Fiat|
id:12345
name:Guillaume
phones:{
"home": "0223456789",
"mobile": "0723456789"
}
email:[
"email@outlook.fr",
"email@gmail.com"
]
dateOfBirth:1995
preferedColours:[
"Green",
"Blue"
] |
alors que je voudrais plutôt
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| product:test
version:3
releaseDate:2014
demo:True
cars:Ford|BMW|Fiat|
id:12345
name:Guillaume
home:0223456789
mobile:0723456789
email:email@outlook.fr|email@gmail.com|
dateOfBirth:1995
preferedColours:Green|Blue| |
Peut être que je devrais essayer de faire une fonction récursive qui s'appel dès lors que j'arrive sur un objet Json ? Ou qu'il existe un moyen plus simple et/ou plus propre de traiter mes données Json :? ?
Merci d'avance