1

mit C# - Ich habe eine Zeichenfolge von gültigen JSON, und versuche, es in ein Wörterbuch zu analysieren, aber bin mit der Syntax zu tun, um dies zu tun.Json.NET (Newtonsoft) etwas dynamische Daten (C#) zu analysieren

Hier ist ein Beispiel für die Daten, die ich analysieren möchte:

{ 
    "data": { 
    "KeyOne": { 
     "val": "first!" 
     "fooBar": "invalid data not needed", 
    }, 
    "anotherKey": { 
     "val": null 
    }, 
    "TheThirdKey": { 
     "val": 999 
     "fooFooBarBar": "more unneeded data", 
    }, 
    "KeyKeyKey": { 
     "val": "super neato something" 
    }, 
    ... 

diese in eine Dictionary<string, object> mit einigen ziemlich spezifischen Regeln bewegt werden muss:

  1. das jemals Namen zu ändern Element der Schlüssel ('KeyOne', 'anotherKey' ...) - das ist einzigartig innerhalb des Datensatzes
  2. für den Wert des Wörterbuchs, I NUR brauchen die Zeichenfolge oder die Zahl oder Null, die das VA ist lue von 'val' ('first', null, 999, ...)

so sollte mein letztes Wörterbuch so etwas wie:

"KeyOne"  : "first!" 
"anotherKey" : null 
"TheThirdKey": 999 
"KeyKeyKey" : "super neato something" 

Ich habe versucht, diese mit verschiedenen Variationen analysieren von

JsonConvert.DeserializeObject<Dictionary<string, object> 

habe versucht, ich auch über die jTokens als solche Iterieren:

JObject jObject = JObject.Parse(jsonString); 
List<JToken> jTokens = jObject["data"].Children().ToList(); 
foreach (JToken jToken in jTokens) { ... 

aber nach so vielen Stunden des Versuchens, werde ich peinlich nirgendwo ... Hoffentlich ist das etwas, was mit Json.NET durchgeführt werden kann, aber ich muss es noch herausfinden.

Gedanken?

Antwort

2

Man könnte es auf diese Weise tun:

JObject jObject = JObject.Parse(jsonString); 
var dataChildren = jObject["data"].Children().Cast<JProperty>(); 
Dictionary<string, object> result = dataChildren 
     .ToDictionary(x => x.Name, x => x.Value["val"].Value<JValue>().Value); 

Sie erhalten eine Dictionary<string,object> als Folge

+0

Sie erhalten danken! das funktioniert genau wie erwartet, und ist super sauber code :) – russellelbert

+0

@russelellbert du bist willkommen :) –

Verwandte Themen