1

I am new to JSON in general. I have a JSON file and I want to extract data from it, but I can't seem to find a way on how to do it. I've searched online, but I could not find any answer or I was just looking at the wrong places.

Here is my JSON data:

{"data":
    {"cars":
        {"total":117,
        "results":[
            {"id":"779579"},
            {"id":"952209"},
            {"id":"1103285"},
            {"id":"1157321"},
            {"id":"1372321"},
            {"id":"1533192"},
            {"id":"1630240"},
            {"id":"2061824"},
            {"id":"2312383"},
            {"id":"2353755"},
            {"id":"2796716"},
            {"id":"2811260"},
            {"id":"2824839"},
            {"id":"2961828"},
            {"id":"3315226"},
            {"id":"3586555"},
            {"id":"3668182"},
            {"id":"3986886"},
            {"id":"3989623"},
            {"id":"3998581"},
            {"id":"4021057"},
            {"id":"4038880"},
            {"id":"4308809"},
            {"id":"4325718"},
            {"id":"4352725"},
            {"id":"4360349"},
            {"id":"4628661"},
            {"id":"4863093"},
            {"id":"4940146"},
            {"id":"4947395"},
            {"id":"5157781"},
            {"id":"5794466"},
            {"id":"6134469"},
            {"id":"6157337"},
            {"id":"6307352"},
            {"id":"6727975"},
            {"id":"6783794"},
            {"id":"6831800"},
            {"id":"6960771"},
            {"id":"7159286"},
            {"id":"7211880"},
            {"id":"7212277"},
            {"id":"7217410"},
            {"id":"7264660"},
            {"id":"7406984"},
            {"id":"7893798"},
            {"id":"7948268"},
            {"id":"8047751"},
            {"id":"8271106"},
            {"id":"8346001"},
            {"id":"8352176"},
            {"id":"8485193"},
            {"id":"8746468"},
            {"id":"8801718"},
            {"id":"9104008"},
            {"id":"9494179"},
            {"id":"9588599"},
            {"id":"9717878"},
            {"id":"9845048"},
            {"id":"9891941"},
            {"id":"9943516"},
            {"id":"10002374"},
            {"id":"10213949"},
            {"id":"10326370"},
            {"id":"10499431"},
            {"id":"10518069"},
            {"id":"10538037"},
            {"id":"10589618"},
            {"id":"10602337"},
            {"id":"10723171"},
            {"id":"10724725"},
            {"id":"10746729"},
            {"id":"10751575"},
            {"id":"10752559"},
            {"id":"10852235"},
            {"id":"10867573"},
            {"id":"10877115"},
            {"id":"10893349"},
            {"id":"10988880"},
            {"id":"10993485"},
            {"id":"11026957"},
            {"id":"11111205"},
            {"id":"11122085"},
            {"id":"11150052"},
            {"id":"11251748"},
            {"id":"11259887"},
            {"id":"11270391"},
            {"id":"11291731"},
            {"id":"11303142"},
            {"id":"11303143"},
            {"id":"11308615"},
            {"id":"11313379"},
            {"id":"11334337"},
            {"id":"11338119"},
            {"id":"11338290"},
            {"id":"11339650"},
            {"id":"11347202"},
            {"id":"11359983"},
            {"id":"11390048"},
            {"id":"11399541"}]}}}

I want to extract all the id and put them in an array. I tried JToken, but it can only get 100 data (up to element [99]) only because anything beyond 99 would give me an error. I tried it using a for loop.

This is the error I get if go beyond 99:

ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

3
  • What programming language are you using? Commented Dec 2, 2022 at 16:14
  • 1
    I tried JToken but it can only get 100 data (up to element [99]) only because anything beyond 99 would give me an error. -- then please edit your question to share a minimal reproducible example showing the code that did not work. Are you sure that your results array has more than 99 items? Commented Dec 2, 2022 at 16:22
  • 1
    In the JSON shown there are only 100 ids, despite the fact that data.cars.total is 117. Looks like you should ignore the total value and just linq as shown here: var ids = jtoken.SelectTokens("data.cars.results[*].id").Select(id => (int)id).ToList();. See dotnetfiddle.net/MhY9s1. Commented Dec 2, 2022 at 16:28

1 Answer 1

2

Your problem is that the value of data.cars.total is not what you think it is. In the JSON shown there are only 100 ids, despite the fact that data.cars.total equals 117. To put those 100 ids into an array, you may use SelectTokens() along with LINQ's ToArray() as follows:

var jtoken = JToken.Parse(jsonString); // Or load the JSON from a stream
var ids = jtoken.SelectTokens("data.cars.results[*].id").Select(id => (int)id).ToArray(); // Remove the .Select(id => (int)id) if you want them as strings

Console.WriteLine("{0} ids found:", ids.Length); // Prints 100
Console.WriteLine(string.Join(",", ids));        // Prints the deserialized ids

Where [*] is the JSONPath wildcard operator selecting all array elements.

Just a guess here, but possibly your JSON reflects a paged response in which data.cars.total is the total number of ids, not the number returned in the current page which was limited to 100.

Demo fiddle here.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.