C#でJSON.NETを使用して複雑なJSONオブジェクト内で見つかった列挙型(プロパティが存在するかどうかを調べる) ?C#でJSON.Netを使用して複雑なJSONオブジェクトをクエリおよび列挙する方法
APIから複雑な番号/タイプのプロパティを使用して複合JSONオブジェクトを受信しています。
私はそれが含まれていることを確認し、私はpageResponses.scriptOutput
プロパティを見つけたい
...など、ダイナミック使って、JToken、サンプルなどではなく、これまで得とjオブジェクト、JArrayで失われていますを見直し、the JSON.Net Documentationを読み続けます.items[]
配列を作成し、配列を列挙/反復します。
編集
私は進歩を遂げたとJSONデータの例では、タイプミスを発見しました。
しかし、(item.location, item.timestamp
)などのキー名を使用して子オブジェクトをクエリ/列挙するにはどうすればよいですか?
string json = File.ReadAllText(@"Output.json");
JObject jObj = JObject.Parse(json);
IList<JToken> items = jObj["pageResponses"][0]["scriptOutput"]["items"].ToList();
foreach (JToken item in items){
Console.WriteLine(item["location"]);
}
/*** Console Output ***/
// Austin, TX
// Anaheim, CA
// Adams, MN
// Barstow, CA
var varItems = from o in jObj["pageResponses"][0]["scriptOutput"]["items"].ToList() select o;
foreach (var item in varItems){
Console.WriteLine(item["timestamp"]);
}
/*** Console Output ***/
// 2016 - 05 - 03 19:53
// 2016 - 05 - 04 04:10
// 2016 - 05 - 04 08:18
// 2016 - 05 - 01 12:26
(以下JSONのサンプルを簡潔にするためにトリムダウン)
{
"meta": {
"outputAsJson": true,
"backend": {
"os": "linux",
"id": "10.240.0.3_2",
"requestsProcessed": 8
}
},
"pageResponses": [
{
"pageRequest": {
"renderType": "script",
"outputAsJson": true
},
"frameData": {
"name": "",
"childCount": 1
},
"events": [
{
"key": "navigationRequested",
"time": "2016-05-06T13:43:30.344Z"
},
{
"key": "navigationRequested",
"time": "2016-05-06T13:43:31.131Z"
}
],
"scriptOutput": {
"items": [
{
"location": "Austin, TX",
"timestamp": "2016-05-03 19:53",
"title": "User Login"
},
{
"location": "Anaheim, CA",
"timestamp": "2016-05-04 04:10",
"title": "User Logout"
},
{
"location": "Adams, MN",
"timestamp": "2016-05-04 08:18",
"title": "User Login"
},
{
"location": "Barstow, CA",
"timestamp": "2016-05-01 12:26",
"title": "User Logout"
}
]
},
"statusCode": 200
}
],
"statusCode": 200,
"content": {
"name": "content.json",
"encoding": "utf8"
},
"originalRequest": {
"pages": [
{
"renderType": "script",
"outputAsJson": true
}
]
}
}
クラス階層を作成できます。デシリアライズしたくないプロパティの場合は、「動的」を使用できます。階層を通過する場合は、再帰関数を使用する必要があります。 –
もう1つの重要な点は、JSONを検証する場合、作成するスキームに対してJSON.Netバリデーターを使用できることです。 Look [here](http://www.jsonschemavalidator.net/) –
この[documentation](http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Schema_JsonSchema.htm)の 'parse'メソッドを見てください。 –