web-dev-qa-db-fra.com

Extraire les données de la chaîne Json

J'ai une chaîne contenant Json. Cela ressemble à ceci:

"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"
}

J'essaye de mettre la main sur "img_url". J'ai installé Json.NET et j'ai trouvé des questions similaires ici ..

par exemple quelque chose comme ça:

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

Dans mon cas, j'ai changé ("People[0].Name") à ("img_url"), ("img_url[0]) etc .. pas de chance

Voici mon code maintenant:

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;
    }
}

Dois-je faire quelque chose avec la chaîne avant de pouvoir extraire la valeur? Merci!

14
user2915962

img_url n'est pas une propriété de l'objet racine - c'est une propriété de data objet:

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

Une autre option:

var url = (string)obj.SelectToken("data.img_url");
35
Sergey Berezovskiy

Avec l'aide de ce 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; }
}

Vous pouvez également faire la même chose avec l'utilisation du mot clé dynamic (sans déclarer les classes ci-dessus)

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