Sid
Sid

Reputation: 765

Parse dynamic json as simple as possible

I am not much of a C# Programmer so I am fairly new to this, I would like to parse the sample JSON below, I have been using the code:

    WebClient client = new WebClient();
    string getString = client.DownloadString(url);

    dynamic j = JsonConvert.DeserializeObject(getString);
    var k = j.rgDescriptions;

    dynamic m = JsonConvert.DeserializeObject(k);
    foreach (var c in m.descriptions)
          {
                Console.WriteLine(c);
          }

I get error in deserialize of k, I am not sure if I am at the right path though. How do I get the "classid" w/o getting the value of their parent, because it is dynamic and not named, it is a Unique ID.

{
    "success": true,
    "rgDescriptions": {
        "671219543": {
            "id": "671219543",
            "classid": "253033065",
            "instanceid": "93973071",
            "amount": "1",
            "pos": 274
        },
        "707030894": {
            "id": "707030894",
            "classid": "166354998",
            "instanceid": "0",
            "amount": "1",
            "pos": 277
        },

Update:

I used this code:

 WebClient client = new WebClient();
            string getString = client.DownloadString(url);


            var jo = JObject.Parse(getString);
            var data = (JObject)jo["rgDescriptions"];
            foreach (var item in data)
            {
                Console.WriteLine("{0}: {1}", item.Key, item.Value);
            }

I could get what I wanted now, but I need to parse each value. Is there a better way?

Upvotes: 0

Views: 197

Answers (1)

xenolightning
xenolightning

Reputation: 4230

You could use JSON.NET and JSONPath to query the incoming JSON, examples here and here

The code below extracts every classid for each object in rgDescriptions

//...
WebClient client = new WebClient();
string getString = client.DownloadString(url);

var obj = JObject.Parse(getString);
var classIds = obj.SelectTokens("$.rgDescriptions.*.classid").Select(x => x.Value<string>()).ToList();  //[253033065,166354998]

//Class ID Where...
var idToSearch = "671219543";
var classId = obj.SelectToken("$.rgDescriptions['" + idToSearch + "']..classid").Value<string>();
//...

Upvotes: 1

Related Questions