2013-07-07 2 views
2

Я использую Json.NET для того, чтобы разобрать json-строку, но когда я пытаюсь использовать SelectToken, он возвращает null. Кроме того, кажется, что Json.NET читать строку JSON, как 1 узелParsing Json string с помощью Json.NET

вот JSON

[ 
    [{ 
     "input_index":0, 
     "candidate_index":0, 
     "delivery_line_1":"124 Main St", 
     "last_line":"Cambridge MA 02138-5813", 
     "delivery_point_barcode":"021385813991", 
     "components":{ 
     "primary_number":"125", 
     "street_name":"Main", 
     "street_suffix":"St", 
     "city_name":"Cambridge", 
     "state_abbreviation":"MA", 
     "zipcode":"02138", 
     "plus4_code":"5813", 
     "delivery_point":"99", 
     "delivery_point_check_digit":"1" 
     }, 
     "metadata":{ 
     "record_type":"H", 
     "county_fips":"25017", 
     "county_name":"New York", 
     "carrier_route":"C025", 
     "congressional_district":"08", 
     "building_default_indicator":"Y" 
     }, 
     "analysis":{ 
     "dpv_match_code":"D", 
     "dpv_footnotes":"AAN1", 
     "dpv_cmra":"N", 
     "dpv_vacant":"N", 
     "ews_match":false, 
     "footnotes":"A#H#N#" 
     } 
    }] 
] 

и вот код

JArray o = JArray.Parse(page); 
string something = (string)o.SelectToken("county_name"); 

Однако это просто возвращает меня нулевой, и я полностью смущен, поскольку что-то не так с JSON.NET разбора этой строки Json

+0

Это массив ... массив не имеет 'county_name' ... –

+0

его находится под метаданными –

+0

Так как я могу его получить ... –

ответ

2

См: What is the JSON.NET equivalent of XML's XPath, SelectNodes, SelectSingleNode?

var data = GetJson(); 

//You can use the SelectToken to get the value similar to XPath. 
var value = JArray.Parse(data) 
        .SelectToken("[0][0].metadata.county_name") 
        .Value<string>(); 

Это может быть расширен для поддержки нескольких элементов:

var jArray = JArray.Parse(data); 
var countyNames = new List<string>(); 

foreach(var element in jArray.SelectToken("[0]")) 
{ 
    var value = element.SelectToken("metadata.county_name").Value<string>(); 

    countyNames.Add(value); 
} 
+0

что использовать '[0] [0]' –

+0

Первый элемент неназванного внешнего массива и первый элемент неназванного внутреннего массива. – Romoku

+0

Но я все еще получаю null, используя этот код idk why !. я сожалею, но у вас было немного терпения, чтобы решить эту проблему. –

0

Итак, проблема в том, что у вас в основном есть обертка вокруг вашего фактического объекта. Вы в основном есть:

Array of objects 
    Object 
    Metadata 
    etc 

Так в основном, получить первый JToken из-за JArray и доступ к метаданным оттуда.

+1

Пожалуйста, сделайте ответ более богатым с кодом, так что другие люди после меня могут найти его полезным –