You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C# Newtonsoft中遍历纯JSON数组?

解决Newtonsoft.Json遍历纯值类型JSON数组的问题

嘿,我懂你的困扰!你拿到的是纯值类型的JSON数组(要么是一串数字,要么是一串字符串),但之前用JObject去遍历肯定会报错——毕竟数组里的元素根本不是键值对形式的JSON对象呀!

先纠正你的错误代码

你原来的代码里foreach(JObject item in array)是问题核心:JObject对应JSON中的对象类型(比如{"key": "value"}),而你的数组里是JValue类型的纯值(整数或字符串),强行转换肯定会出类型不匹配的异常。

两种正确的遍历方案

方案1:直接用JToken遍历(适合不确定数组类型的情况)

如果你不确定JSON数组里是数字还是字符串,可以用JToken来遍历,然后根据元素的类型做相应处理:

// 示例JSON:数字数组或字符串数组
string json = "[ 78293270, 847744, 32816430 ]"; 
// string json = "[\"aa\", \"bb\", \"cc\"]";

JArray array = JsonConvert.DeserializeObject<JArray>(json);

foreach (JToken item in array)
{
    // 判断元素的JSON类型
    switch (item.Type)
    {
        case JTokenType.Integer:
            int number = item.Value<int>();
            Console.WriteLine($"处理数字:{number}");
            break;
        case JTokenType.String:
            string text = item.Value<string>();
            Console.WriteLine($"处理字符串:{text}");
            break;
        // 还可以扩展其他类型,比如布尔、浮点数等
    }
}

方案2:直接反序列化为.NET原生数组(适合已知类型的情况)

如果提前知道JSON数组的类型,直接转成对应的.NET数组是最简洁的,完全不用和JToken打交道:

// 数字数组的情况
string numJson = "[ 78293270, 847744, 32816430 ]";
int[] numArray = JsonConvert.DeserializeObject<int[]>(numJson);
foreach (int num in numArray)
{
    Console.WriteLine(num);
}

// 字符串数组的情况
string strJson = "[\"aa\", \"bb\", \"cc\"]";
string[] strArray = JsonConvert.DeserializeObject<string[]>(strJson);
foreach (string str in strArray)
{
    Console.WriteLine(str);
}

额外小提示

如果你的数组可能混合类型(虽然这种情况很少见),也可以用JValue来遍历,JValue是所有纯值类型的基类,用法和JToken类似。

内容的提问来源于stack exchange,提问作者xpt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:12:10