2015-11-29 9 views
2

Так что мне нужно разобрать строку JSON из моего проекта C#. Я получаю JSON в качестве ответа от вызова метода и JSON выглядит следующим образом:C# доступ к содержимому JSON по ID

{ 
    "10": { 
     "entity_id": "10", 
     "attribute_set_id": "4", 
     "type_id": "simple", 
     "sku": "convertor-touchscreen", 
     "name": "Convertor touchscreen", 
     "meta_title": null, 
     "meta_description": null, 
     "url_key": "convertor-touchscreen", 
     "custom_design": null, 
     "page_layout": null, 
     "options_container": "container1", 
     "country_of_manufacture": null, 
     "msrp_enabled": "2", 
     "msrp_display_actual_price_type": "4", 
     "gift_message_available": null, 
     "creareseo_discontinued": null, 
     "creareseo_discontinued_product": null, 
     "description": "Convertor touchscreen", 
     "short_description": "Convertor touchscreen", 
     "meta_keyword": null, 
     "custom_layout_update": null, 
     "price": "421.0000", 
     "special_price": "380.0000", 
     "weight": "0.1500", 
     "msrp": null, 
     "special_from_date": "2015-11-24 00:00:00", 
     "special_to_date": "2015-11-26 00:00:00", 
     "news_from_date": null, 
     "news_to_date": null, 
     "custom_design_from": null, 
     "custom_design_to": null, 
     "status": "1", 
     "visibility": "4", 
     "tax_class_id": "2", 
     "featured": "1" 
    } 
} 

Поэтому мне нужно, чтобы получить доступ пользователей как «ENTITY_ID», «имя» и так далее ... поэтому я попытался

using Newtonsoft.Json.Linq; 
... 
// output is the above JSON string 
var jo = JObject.Parse(output); 
var id = jo[0]["entity_id"].ToString(); 

Но, очевидно, это нехороший способ сделать это. Кроме того, у меня нет контроля над первой частью

{ 
    "10": { 

Так что я не могу сделать

var id = jo["10"]["entity_id"].ToString(); 

, потому что я не знаю, что значение «10» будет в моей следующей строке JSON. Итак, как я могу получить значение элемента с помощью идентификатора или чего-то еще?

+0

Непонятно, что вы * делаете * знаете. Будет ли когда-нибудь единое целое в JSON? Как вы думаете, «не очень хорошо» о том, что у вас есть? –

ответ

2

Если вы не знаете значения 10 заранее, очевидно, что вы не можете получить доступ к его содержимому с помощью этого ключа (в вашем примере это будет ключом для доступа к другим свойствам). Если этот объект всегда будет иметь 1 верхнее свойство уровня, то ваш код просто отлично:

var jo = JObject.Parse(output); 
var id = jo[0]["entity_id"].ToString(); 

с некоторыми добавил оборонительные проверки, что jo массив имеет по крайней мере одно свойство, прежде чем пытаться получить к нему доступ.

С другой стороны, если ключом находится внутри некоторого свойства объекта, который вы знаете об этом, то не стесняйтесь перебрать все свойства верхнего уровня jo переменных инспектирующего подсвойство для значений ключ, который вы знаете, пока не найдете нужную запись.

+0

Я думаю, что вам не хватает смысла. Я не могу получить доступ к свойству, потому что я не знаю значения «10». Поэтому мне придется пройти по ID, но я получу ошибку, если попытаюсь это сделать. Таким образом, код, который вы написали выше, тот же, который я поставил в моем вопросе как пример нерабочего кода: error: 'Доступ к значениям JObject с недопустимым значением ключа: 0. Имя свойства объекта ожидается. – user1137313

+0

Я пришел к рабочему решению, поэтому я немного изменю вопрос: как я могу получить доступ к JSON, если есть несколько элементов верхнего уровня 1, и я их не знаю? – user1137313

+0

Если есть несколько элементов верхнего уровня, и вы их не знаете, и вы не знаете, к чему хотите получить доступ, то чего именно вы ожидаете достичь? Вы можете, конечно, пройти через все элементы верхнего уровня, но если вы не знаете, что ищете, то найти его близко к нулю. –

0

Так я пришел к conclussion по себе: Если JSON содержит только один верхний 1 уровень элемента («10» в моем случае), то я могу получить доступ к свойствам внутри этого элемента так же, как:

var descr = output.description; 
var entid = output.entity_id; 
... and so on 

Я до сих пор не знаю, как получить доступ к JSON, который содержит несколько элементов верхнего уровня 1. Но я задам другой вопрос.

Смежные вопросы