2015-05-27 2 views
2

У меня есть JSON из API УФ-индекса EPA. Json - это массив с отдельными элементами в нем. Пример JSON:Deserializing JSON Array с JSON.net

[ 
{ 
"ORDER": 1, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 07 AM", 
"UV_VALUE": 0 
}, 
{ 
"ORDER": 2, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 08 AM", 
"UV_VALUE": 1 
}, 
{ 
"ORDER": 3, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 09 AM", 
"UV_VALUE": 1 
}, 
{ 
"ORDER": 4, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 10 AM", 
"UV_VALUE": 2 
}, 
{ 
"ORDER": 5, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 11 AM", 
"UV_VALUE": 3 
}, 
{ 
"ORDER": 6, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 12 PM", 
"UV_VALUE": 7 
}, 
{ 
"ORDER": 7, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 01 PM", 
"UV_VALUE": 6 
}, 
{ 
"ORDER": 8, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 02 PM", 
"UV_VALUE": 6 
}, 
{ 
"ORDER": 9, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 03 PM", 
"UV_VALUE": 7 
}, 
{ 
"ORDER": 10, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 04 PM", 
"UV_VALUE": 5 
}, 
{ 
"ORDER": 11, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 05 PM", 
"UV_VALUE": 3 
}, 
{ 
"ORDER": 12, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 06 PM", 
"UV_VALUE": 1 
}, 
{ 
"ORDER": 13, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 07 PM", 
"UV_VALUE": 0 
}, 
{ 
"ORDER": 14, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 08 PM", 
"UV_VALUE": 0 
}, 
{ 
"ORDER": 15, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 09 PM", 
"UV_VALUE": 0 
}, 
{ 
"ORDER": 16, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 10 PM", 
"UV_VALUE": 0 
}, 
{ 
"ORDER": 17, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 11 PM", 
"UV_VALUE": 0 
}, 
{ 
"ORDER": 18, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 12 AM", 
"UV_VALUE": 0 
}, 
{ 
"ORDER": 19, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 01 AM", 
"UV_VALUE": 0 
}, 
{ 
"ORDER": 20, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 02 AM", 
"UV_VALUE": 0 
}, 
{ 
"ORDER": 21, 
"ZIP": 19021, 
"DATE_TIME": "MAY/27/2015 03 AM", 
"UV_VALUE": 0 
} 
] 

Для того, чтобы разобрать его, я предположил, что я мог бы просто использовать foreach заявление, чтобы получить значение УФ индекса для каждого элемента. b.Результат - это выше JSON.

JObject EPAData = JObject.Parse(b.Result); 
foreach (var UVIndex in EPAData.Root) 
{ 
    string uv = (string)UVIndex["UV_VALUE"]; 
    //Do whatever I want with the UV index 
}; 

Однако, похоже, что это не работает. Появляется сообщение об ошибке:

Ошибка при использовании: Ошибка чтения JObject от JsonReader. Текущий Элемент JsonReader не является объектом: StartArray. Путь '', линия 1, позиция 1.

ответ

0

Ваш JSON представляет собой массив, а не объект, поэтому используйте JArray.Parse вместо:

JArray EPAData = JArray.Parse(b.Result); 

foreach (var UVIndex in EPAData) 
{ 
    Console.WriteLine (UVIndex["UV_VALUE"]); // 0, 1, 1, etc. 
} 

Пример:https://dotnetfiddle.net/G4PkSf

0

Если вы хочу получить значение Uv_VALUE только довольно просто, вы можете использовать этот код:

 var json = JArray.Parse(s); 
     var list_items = json.Children<JObject>().Properties().Where(p => p.Name == "UV_VALUE").ToList(); 
     list_items.ForEach(c=>Console.WriteLine(c.Name+" "+c.Value)); 
Смежные вопросы