2014-06-15 17 views
9

मुझे जेसन युक्त एक स्ट्रिंग मिली है। यह इस तरह दिखता है:जेसन स्ट्रिंग से डेटा निकालें

"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"); 

मेरे मामले मैं ("img_url") को ("People[0].Name") बदल में, ("img_url[0]) etc..no भाग्य

यह अब मेरी कोड है:

public string tempJson { get; set; } 
public ActionResult SaveUploadedFile(string test) 
{ 
    using (WebResponse wrs = wrq.GetResponse()) 
    using (Stream stream = wrs.GetResponseStream()) 
    using (StreamReader reader = new StreamReader(stream)) 
    { 
     string json = reader.ReadToEnd(); 
     tempJson = json; 
    } 
} 

मैं तार के साथ कुछ करने के लिए इससे पहले कि मैं मान प्राप्त कर सकते हैं है? धन्यवाद!

+0

देखो बारीकी से। "Img_url" प्रॉपर्टी एक JSON ऑब्जेक्ट का हिस्सा है, जिसे फिर से JSON प्रॉपर्टी को असाइन किया जाता है। उस संपत्ति का नाम क्या है? – elgonzo

+0

आपका मतलब डेटा है? मैं हार गया हूं? – user2915962

+2

हां, "डेटा"। इसलिए आपको 'SelectToken ("data.img_url") का उपयोग करना चाहिए; ' – elgonzo

उत्तर

30

img_url नहीं है रूट ऑब्जेक्ट की एक संपत्ति - यह data ओबी की संपत्ति है अस्वीकृत:

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 धन्यवाद। इंडेक्सर्स के साथ गुणों को पढ़ने में जेपीएथ को पार्सिंग शामिल नहीं है, लेकिन मुझे बेहतर बेहतर पठनीयता के लिए सिलेक्ट टोकन विकल्प पसंद है (और यह अधिक सुरक्षित है) –

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); 
संबंधित मुद्दे