Home > other >  C# effective way to get JSON property value from nested JSON response
C# effective way to get JSON property value from nested JSON response

Time:10-06

I am getting a HTTP response as JSON string. I am converting the response as JObject. Response contains "sessions" node and it contains more sessions value each sessions contains "events" with one or multiple "events" each events contains "Type" and "ArbitaryData" ArbitaryData contains "interest".

I am trying to take all the "interest" values, from all the sessions and all the events but if the event type = "search".

what's the effective way to do that other than doing for loop?

 JObject json = JObject.Parse(guestJsonResponse);
 var sessions = json.SelectToken("sessions");
 var events = sessions.SelectTokens("events");

Below is my JSON string response example

  {
  "firstName":"fn",
  "lastName":"ln",
   "gender":"male",
  "sessions":[
  {
     "currency":"USD",
     "events":[
        {
           "type":"SEARCH",
           "status":"PROCESSED",
           "arbitraryData":{
              "interest":"Health"
           }
        },
        {
           "type":"CHECK",
           "status":"PROCESSED",
           "arbitraryData":{
              "interest":"Dental"
           }
        }
     ]
  },
  {
     "currency":"USD",
     "events":[
        {
           "type":"SEARCH",
           "status":"PROCESSED",
           "arbitraryData":{
              "interest":"Health"
           }
        },
        {
           "type":"CHECK",
           "status":"PROCESSED",
           "arbitraryData":{
              "interest":"Dental"
           }
        }
     ]
  },
  {
     "currency":"USD",
     "events":[
        {
           "type":"SEARCH",
           "status":"PROCESSED",
           "arbitraryData":{
              "interest":"Health"
           }
        },
        {
           "type":"CHECK",
           "status":"PROCESSED",
           "arbitraryData":{
              "interest":"Dental"
           }
        }
     ]
  }
   ]
     }

CodePudding user response:

This code will return all the "interest" values, from all the sessions where the event type = "SEARCH"

List<string> interests = ((JArray)JObject.Parse(json)["sessions"])
                              .SelectMany(i => ((JArray)i["events"]))
                              .Where(x => (string)x["type"] == "SEARCH")
                              .Select(x => (string)x["arbitraryData"]["interest"])
                              .ToList();
  • Related