0

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"
           }
        }
     ]
  }
   ]
     }
Jey
  • 2,137
  • 4
  • 22
  • 40
  • 2
    You could create a DTO class, parse the JSON into an instance of that class and then use LINQ to filter out unwanted objects in the list – Julian Oct 05 '22 at 19:09
  • Take a look at here https://stackoverflow.com/questions/23645034/jobject-parse-vs-jsonconvert-deserializeobject – Batuhan Oct 05 '22 at 19:34

1 Answers1

2

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();
Serge
  • 40,935
  • 4
  • 18
  • 45