2017-02-24 19 views
1

私は有効なjsonの文字列を持っており、それを辞書に解析しようとしていますが、そうする構文に苦しんでいます。ここで多分動的なデータを解析するためにJson.NET(Newtonsoft)

は、私が解析したいデータの例です:

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

これは、いくつかのかなり特定のルールでDictionary<string, object>に移動する必要があります

  1. 絶えず変化する要素名がありますキー( 'KeyOne'、 'anotherKey' ...) - これはデータセット内で一意です
  2. 辞書値の場合、のみには文字列または数値またはnullが必要です'val'(...、 '最初の' nullの場合、999)

のLUEので、私の最後の辞書のようなものでなければなりません:私はこの使用してさまざまなバリエーションを解析しようとした

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

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

JsonConvert.DeserializeObject<Dictionary<string, object> 

の私はまたのようなjTokensを反復処理しようとしました

しかし、何時間も試してみると、私は恥ずかしそうにもどこにもいなくなりました。うまくいけば、これはJson.NETで実行できるものですが、まだ分かりません。

思考?

答えて

2

あなたは、このようにそれを行うことができます:

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); 

あなたは

+0

はあなたに感謝し、結果としてDictionary<string,object>を取得します!これは期待どおり正確に動作し、スーパークリーンなコードです:) – russellelbert

+0

@ russellelbertあなたは歓迎です:) –

関連する問題