2013-07-07 62 views
2

我正在使用Json.NET來解析json字符串,但是當我嘗試使用SelectToken時,它返回null。此外,它似乎Json.NET閱讀JSON字符串作爲1個節點使用Json.NET解析Json字符串

這裏是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爲什麼!我很抱歉,但你能有一點耐心解決這個問題 –

0

所以,問題是你基本上有一個包裹你的實際對象。您主要有:

Array of objects 
    Object 
    Metadata 
    etc 

所以基本上,獲得第JTokenJArray,並從那裏訪問元數據。

+1

請讓代碼更豐富,讓我後面的其他人可以找到它有用 –