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

如何扁平化嵌套JArray?将JArray的JArray转为JObject数组

解决嵌套JArray扁平化为JObject数组的问题

针对你要把嵌套JArray结构扁平化为单一JObject数组的需求,我来帮你梳理更简洁高效的实现方式,同时也点评下你当前的代码方案。

需求回顾

你的输入是外层JArray,每个元素是包含item字段的JObject,item对应一个子JArray;子JArray里的每个元素是带fieldName(键名)和value(键值)的JObject。最终目标是把每个子JArray转成以fieldName为键、value为值的JObject,所有这些JObject组成一个新的JArray。

更简洁的实现方案

你可以借助Newtonsoft.Json的LINQ API来简化代码,避免手动多层循环和字段操作,代码可读性和简洁度都会提升:

using Newtonsoft.Json.Linq;

public string FlattenNestedJArray(string json)
{
    var originalArray = JArray.Parse(json);
    var flattenedArray = new JArray(
        originalArray.Select(parentItem => 
            new JObject(
                parentItem["item"].Select(fieldEntry => 
                    new JProperty(fieldEntry["fieldName"].ToString(), fieldEntry["value"])
                )
            )
        )
    );
    return flattenedArray.ToString();
}

代码逻辑说明:

  • 先解析原始JSON为JArray
  • 用Select遍历外层数组的每个元素,对每个元素:
    • 取出item对应的子数组,再用Select把每个fieldEntry转成JProperty(键为fieldName的值,值为value的值)
    • 把这些JProperty直接构建成新的JObject
  • 最后将所有新的JObject打包成JArray,转成字符串返回

对现有实现的点评

你的代码逻辑是可行的,但有几个可以优化的点:

  • 命名可读性:temp、fieldname这类命名可以更清晰,比如改成fieldsArray、propertyName,后续维护起来更方便
  • 避免修改原对象:你当前的代码是在原item对象上添加新属性,再移除旧字段,其实完全可以直接构建新的JObject,这样不会对原始数据产生意外修改,逻辑更干净
  • 增加空值防护:如果输入中存在item字段缺失、子数组为空,或者某个fieldEntry缺少fieldName/value的情况,你的代码会抛出异常。建议加上空值判断,比如:
    if (item["item"] is not JArray fieldsArray) continue;
    var propertyName = jobject["fieldName"]?.ToString();
    var propertyValue = jobject["value"];
    if (!string.IsNullOrEmpty(propertyName) && propertyValue != null)
    {
        // 执行属性添加逻辑
    }
    

测试结果验证

用你提供的输入示例测试上述方案,会得到符合预期的正确JSON结构(修正了你示例里的语法错误,正确JSON的键值对需要用逗号分隔):

[
  { "Name": "Andy", "Phone": "678-905-9872" },
  { "Name": "John", "Phone": "688-954-5678" },
  { "Name": "Ashley", "Phone": "+44 671 542 8945" },
  { "Name": "Avi", "Phone": "(212)-908-7772" }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:04:38