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

C#如何使用JToken从JObject嵌套数组提取name值存入List

问题说明

解析服务端返回的JSON响应时,通过var jObject = JObject.Parse(receivedResult);完成解析后,需要提取params字段对应嵌套JArray中所有品牌对象的name字段值,存入List<string>类型集合。原有实现代码仅能获取到数组第一个索引位的name值"Abarth",无法拿到全量品牌名称。
原有问题代码如下:

JArray paramsArray = (JArray)jObject["params"];
List<string> listName = new List<string>();

foreach(JToken param in paramsArray)
{
    name = (string)param[0]["name"]; // 仅获取到索引0对应的name值"Abarth"
    listName.Add(name);

    foreach(var item in listName)
    {
        tbResultCreateNewAd.Text = item.ToString();
    }
    
}
错误原因
  • 取值时硬编码写死索引param[0],每次循环都只读取当前节点下第一个子元素的name,没有遍历嵌套数组内的所有品牌对象
  • 文本框赋值逻辑写在收集集合的循环内部,每次赋值都会覆盖上一次写入的内容,最终文本框只会显示最后一次赋值的单个值
正确实现代码
JArray paramsArray = (JArray)jObject["params"];
List<string> listName = new List<string>();

// 遍历params下的每一个嵌套数组节点
foreach (JToken nestedArray in paramsArray)
{
    // 遍历当前嵌套数组内的所有品牌对象
    foreach (JToken brand in (JArray)nestedArray)
    {
        string brandName = (string)brand["name"];
        // 跳过name为空的异常数据
        if (!string.IsNullOrWhiteSpace(brandName))
        {
            listName.Add(brandName);
        }
    }
}

// 全量数据收集完成后,统一给文本框赋值,用换行分隔所有品牌名
tbResultCreateNewAd.Text = string.Join(Environment.NewLine, listName);
注意点
  • 多层嵌套的JArray需要对应层级的循环遍历,不要硬编码固定索引读取元素,否则只能拿到固定位置的值
  • UI控件赋值不要放在循环收集数据的逻辑里,避免反复覆盖值,也能减少不必要的UI刷新
  • 提取字段值时建议加空值判断,避免JSON结构异常、字段缺失时触发空引用报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:42:09