次のようなJSONデータがあります。
{
"910719": {
"id": 910719,
"type": "asdf",
"ref_id": 7568
},
"910721": {
"id": 910721,
"type": "asdf",
"ref_id": 7568
},
"910723": {
"id": 910723,
"type": "asdf",
"ref_id": 7568
}
}
JSON.netを使用してこれを解析するにはどうすればよいですか?私はこれを最初に行うことができます:
JObject jFoo = JObject.Parse(data);
このリストの各オブジェクトを反復処理できる必要があります。私はこのようなことができるようになりたいです:
foreach (string ref_id in (string)jFoo["ref_id"]) {...}
または
foreach (JToken t in jFoo.Descendants())
{
Console.WriteLine((string)t["ref_id"]);
}
もちろん、それはうまくいきません。コードの記述中にキーを知っていれば、すべての例がうまく機能します。事前に鍵がわからないと故障します。
実行可能です。これは機能しますが、エレガントではありません。もっと良い方法があると確信しています。
var o = JObject.Parse(yourJsonString);
foreach (JToken child in o.Children())
{
foreach (JToken grandChild in child)
{
foreach (JToken grandGrandChild in grandChild)
{
var property = grandGrandChild as JProperty;
if (property != null)
{
Console.WriteLine(property.Name + ":" + property.Value);
}
}
}
}
プリント:
id:910719 type:asdf ref_id:7568 id:910721 type:asdf ref_id:7568 id: 910723 type:asdf ref_id:7568
私はJson.NETを使用しており、再帰的な方法を使用してすべてのキーと対応する値を出力できる簡単な方法を書きました。
var o = JObject.Parse(YourJsonString);
getAllProperties(o); //call our recursive method
次に、この再帰的メソッドを使用して、すべてのプロパティとその値を取得できます
void getAllProperties(JToken children)
{
foreach (JToken child in children.Children())
{
var property = child as JProperty;
if (property != null)
{
Console.WriteLine(property.Name + " " + property.Value);//print all of the values
}
getAllProperties(child);
}
}
次のような簡単なLINQクエリを使用して、子孫を反復できます。
JObject jFoo = JObject.Parse(json);
foreach (JObject obj in jFoo.Properties().Select(p => p.Value))
{
Console.WriteLine("id: " + obj["id"]);
Console.WriteLine("ref_id: " + obj["ref_id"]);
}
同様に、ref_id
値。次のようなものを取得できます。
foreach (string refId in jFoo.Properties().Select(p => p.Value["ref_id"]))
{
Console.WriteLine(refId);
}
JavascriptSerializerの使用を検討しましたか?
あなたはこのようなことを試すことができます:
JavaScriptSerializer serializer = new JavaScriptSerializer();
var foo = serializer.Deserialize<Dictionary<string, Dictionary<string, string>>>(data);
foreach(var item in foo)
{
Console.Writeln(item.Value["ref_id"]);
}
http://msdn.Microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx