Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

json.net IEnumerable

I have the following json file

{"fields":[
  {
     "status":"active",
     "external_id":"title",
     "config":{},
     "field_id":11848871,
     "label":"Title",
     "values":[
        {
           "value":"Test Deliverable"
        }
     ],
     "type":"text"
  },{
     "status":"active",
     "external_id":"client-name",
     "config":{},
     "field_id":12144855,
     "label":"Client Name",
     "values":[
        {
           "value":"Chcuk Norris"
        }
     ],
     "type":"text"
  }}

And I want to select the value of the field that has its external_id = "title" for example, I'm using Json.Net and already parsed the object. How do i do this using lambda or linq on the Json object, I trird something like this

JObject o = JObject.Parse(json);
Title = o["fields"].Select(q => q["extenral_id"].Values[0] == "title");

Which is not event correct in terms of syntax. I'm not very proficient in Lambda or Linq thought its been there for a while. Appreciate the help

Thanks

Yehia

like image 567
Yehia A.Salam Avatar asked Nov 22 '25 12:11

Yehia A.Salam


1 Answers

Or you can do this:

 string json = "{\"fields\":[{\"status\":\"active\",\"external_id\":\"title\",\"config\":{},\"field_id\":11848871,\"label\":\"Title\",\"values\":[{\"value\":\"Test Deliverable\"}],\"type\":\"text\"},{\"status\":\"active\",\"external_id\":\"client-name\",\"config\":{},\"field_id\":12144855,\"label\":\"Client Name\",\"values\":[{\"value\":\"Chcuk Norris\"}],\"type\":\"text\"}]}";

 JObject obj = JObject.Parse(json);

 JArray arr = (JArray)obj["fields"];

 var externalIds = arr.Children().Select(m=>m["external_id"].Value<string>());

externalIds is a IEnumerable array of string

Or you can chain it together and select the object in one line:

var myVal = JObject.Parse(json)["fields"].Children()
                                        .Where(w => w["external_id"].ToString() == "title")
                                        .First();

From there you can append whatever selector you want ie if you want the external_id value then append ["external_id"].ToString() to the end of the first() selector.

like image 125
gdp Avatar answered Nov 25 '25 02:11

gdp



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!