2014-06-15 177 views
9

我得到了一個包含Json的字符串。它看起來像這樣:從Json字符串中提取數據

"status_code":200, 
"status_txt":"OK", 
"data": 
{ 
    "img_name":"D9Y3z.png", 
    "img_url":"http:\/\/s1.uploads.im\/D9Y3z.png", 
    "img_view":"http:\/\/uploads.im\/D9Y3z.png", 
    "img_width":"167", 
    "img_height":"288", 
    "img_attr":"width=\"167\" height=\"288\"", 
    "img_size":"36.1 KB", 
    "img_bytes":36981, 
    "thumb_url":"http:\/\/s1.uploads.im\/t\/D9Y3z.png", 
    "thumb_width":360, 
    "thumb_height":360, 
    "source":"http:\/\/www.google.com\/images\/srpr\/nav_logo66.png", 
    "resized":"0", 
    "delete_key":"df149b075ab68c38" 
} 

我試圖抓住「img_url」。我已經Json.NET安裝並從來就發現了類似的問題在這裏..

例如是這樣的:

JObject o = JObject.Parse("{'People':[{'Name':'Jeff'},{'Name':'Joe'}]}"); 

// get name token of first person and convert to a string 
string name = (string)o.SelectToken("People[0].Name"); 

在我來說,我改變("People[0].Name")("img_url")("img_url[0]) etc..no運氣

這是我現在的代碼:

​​3210

我必須做一些事情串之前,我可以提取價值? 謝謝!

+0

仔細查看。 「img_url」屬性是JSON對象的一部分,該對象再次分配給JSON屬性。那個房產的名字是什麼? – elgonzo

+0

你的意思是數據?我迷路了? – user2915962

+2

是的,「數據」。因此,你應該使用'SelectToken(「data.img_url」);' – elgonzo

回答

30

img_url不根對象的屬性 - 它是data ob的屬性JECT:

var obj = JObject.Parse(json); 
var url = (string)obj["data"]["img_url"]; // http://s1.uploads.im/D9Y3z.png 

另一種選擇:在您的JSON

var url = (string)obj.SelectToken("data.img_url"); 
+1

+1好。現在我不需要完成我的答案了:-b – elgonzo

+3

@elgonzo謝謝。使用索引器讀取屬性不涉及解析JPath,但我喜歡SelectToken選項以提高可讀性(並且更安全) –

11

隨着this site

var obj = JsonConvert.DeserializeObject<RootObject>(json); 
Console.WriteLine(obj.data.img_url); 

public class Data 
{ 
    public string img_name { get; set; } 
    public string img_url { get; set; } 
    public string img_view { get; set; } 
    public string img_width { get; set; } 
    public string img_height { get; set; } 
    public string img_attr { get; set; } 
    public string img_size { get; set; } 
    public int img_bytes { get; set; } 
    public string thumb_url { get; set; } 
    public int thumb_width { get; set; } 
    public int thumb_height { get; set; } 
    public string source { get; set; } 
    public string resized { get; set; } 
    public string delete_key { get; set; } 
} 

public class RootObject 
{ 
    public int status_code { get; set; } 
    public string status_txt { get; set; } 
    public Data data { get; set; } 
} 

你也可以做同樣的事情與使用dynamic關鍵字的幫助下(沒有宣佈上述類)

dynamic obj = JsonConvert.DeserializeObject(json); 
Console.WriteLine(obj.data.img_url);