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

如何判断JSON结果中是否含名为data的数组并获取其父对象名

检测JSON中的"data"数组并获取其父对象

下面针对.NET生态中两种主流JSON处理库,给出具体实现方案:


使用Newtonsoft.Json(Json.NET)

这是.NET社区广泛使用的JSON处理库,实现步骤如下:

  1. 将JSON字符串解析为JObject对象
  2. 遍历节点查找键为"data"且值为数组类型的项,记录其父对象的键名
  3. 找到后即可通过jo[父键名]["data"]的形式访问目标数组

示例代码(针对顶层子对象的场景)

using Newtonsoft.Json.Linq;

string jsonStr = "你的JSON返回字符串";
JObject rootObj = JObject.Parse(jsonStr);

string parentKey = null;
JArray dataArray = null;

// 遍历所有顶层属性
foreach (var prop in rootObj.Properties())
{
    if (prop.Value.Type == JTokenType.Object)
    {
        var childObj = prop.Value as JObject;
        // 检查当前子对象是否包含"data"数组
        if (childObj.ContainsKey("data") && childObj["data"].Type == JTokenType.Array)
        {
            parentKey = prop.Name;
            dataArray = childObj["data"] as JArray;
            break;
        }
    }
}

// 结果判断
if (parentKey != null && dataArray != null)
{
    Console.WriteLine($"找到data数组,父对象键为:{parentKey}");
    // 后续可通过rootObj[parentKey]["data"]操作数组
}
else
{
    Console.WriteLine("未找到符合要求的data数组");
}

递归遍历版(适配更深层级的JSON结构)

如果data数组可能存在于更深的嵌套对象中,可以用递归遍历所有节点:

private static void FindDataArrayParent(JToken token, ref string parentKey, ref JArray dataArray)
{
    if (token.Type == JTokenType.Object)
    {
        foreach (var prop in (JObject)token)
        {
            if (prop.Key == "data" && prop.Value.Type == JTokenType.Array)
            {
                // 获取当前对象的父节点键名
                var parentProp = token.Parent as JProperty;
                parentKey = parentProp?.Name;
                dataArray = prop.Value as JArray;
                return;
            }
            FindDataArrayParent(prop.Value, ref parentKey, ref dataArray);
            if (parentKey != null) break;
        }
    }
}

// 调用方式
string parentKey = null;
JArray dataArray = null;
FindDataArrayParent(rootObj, ref parentKey, ref dataArray);

使用System.Text.Json(.NET Core 3.0+内置)

如果使用.NET Core或.NET 5+版本,可直接用官方内置的System.Text.Json库:

using System.Text.Json;

string jsonStr = "你的JSON返回字符串";
using JsonDocument doc = JsonDocument.Parse(jsonStr);

string parentKey = null;
JsonElement dataArray = default;

void TraverseJson(JsonElement element, string currentParentKey)
{
    if (element.ValueKind == JsonValueKind.Object)
    {
        foreach (var prop in element.EnumerateObject())
        {
            if (prop.Name == "data" && prop.Value.ValueKind == JsonValueKind.Array)
            {
                parentKey = currentParentKey;
                dataArray = prop.Value;
                return;
            }
            TraverseJson(prop.Value, prop.Name);
            if (parentKey != null) break;
        }
    }
}

TraverseJson(doc.RootElement, null);

if (parentKey != null)
{
    Console.WriteLine($"找到data数组,父对象键为:{parentKey}");
    // 后续可通过重新解析后,用root.GetProperty(parentKey).GetProperty("data")访问数组
}
else
{
    Console.WriteLine("未找到符合要求的data数组");
}

注意事项

  • 如果JSON中存在多个"data"数组,上述代码会返回第一个匹配项;若需收集所有匹配结果,只需修改逻辑存储所有符合条件的父键
  • 建议在解析JSON时添加try-catch块,处理格式错误等异常情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:07:25