如何使用Newtonsoft Json对这种类型的Json数组进行数据抽取

gz5pxeao  于 2022-12-05  发布在  其他
关注(0)|答案(2)|浏览(145)

我是一个JSON新手。我有一个JSON文件,我想从中提取数据,但我似乎找不到一种方法。我在网上搜索过,但我找不到任何答案,或者我只是在错误的地方寻找。
下面是我的JSON数据:

{"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"}]}}}

我想提取所有的id并把它们放在一个数组中。我试过JToken,但它只能得到100个数据(最多到元素[99]),因为任何超过99的数据都会给予我一个错误。我试过使用for循环。
这是我得到的错误,如果超过99:
参数超出范围异常:索引超出范围。必须为非负数且小于集合的大小。
参数名称:索引

bqucvtff

bqucvtff1#

您的问题是data.cars.total的值不是您所认为的值。在所示的JSON中只有100个id,尽管data.cars.total等于117。要将这100个id放入数组中,您可以将SelectTokens()与LINQ的ToArray()沿着使用,如下所示:

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

其中[*]JSONPath通配符运算符,用于选择所有数组元素。
这里只是猜测,但您的JSON可能反映了paged response,其中data.cars.total是id的总数,而不是当前页面中返回的数量(限制为100)。
演示小提琴here

ymdaylpp

ymdaylpp2#

感谢大家指出数组的内容只有100而不是117。这就解决了问题。Json文件没有返回我所期望的确切数据数(117)。结果表明,我的代码沿着工作正常,问题出在Json文件上。

相关问题