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:
Je me suis fais un JSON de testclé: cars
valeur: Ford|BMW|Fiat
et un projet en C# contenant une classe "parser":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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" ] } }
je récupère le json parsé de cette façon:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }
ce qui donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
alors que je voudrais plutôt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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" ]
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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|?
Merci d'avance
Partager