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

如何展平无命名属性的交替式嵌套JSON结构?

解决无命名交替结构JSON的展平问题

这个JSON的files字段设计比较特殊——它是一个交替混合类型的数组:每隔一个元素是文件哈希字符串,下一个元素就是对应哈希的文件列表数组。这种结构没法直接用强类型类反序列化,因为强类型期望的是对象数组,而这里是字符串和数组交替出现,这就是你遇到序列化异常的核心原因。

用Newtonsoft.Json的Linq to JSON(JObject/JArray)来处理是最灵活的方案,直接操作JSON的原始结构,不用纠结强类型映射。下面是具体实现代码:

using Newtonsoft.Json.Linq;

// 替换成你的原始JSON字符串
string jsonStr = @"{ ""build"": 44396, ""files"": [""00005DC8F14C92FFA13E7FDF1C9C35E4684F8B7A"", [ [""file1.zip"", 462485959, 462485959, 2, 0, 883, true, 266716, 1734, 992, 558, 0], [""file1.doc"", 521042, 521042, 2, 0, 883, true, 266716, 1734, 992, 558, 0] ], ""0001194B90612DFB5E8D363249719FB62E221430"", [ [""file2.iso"", 501163544, 501163544, 2, 0, 956, true, 194777, 2573, 0, 0, 0] ], ""0002B5245B0897BEA7D7F426E104B6D24FF368DE"", [ [""file3.mp4"", 284564707, 284564707, 2, 0, 543, true, 205165, 1387, 853, 480, 0] ]] }";

var jsonObj = JObject.Parse(jsonStr);
var filesArray = (JArray)jsonObj["files"];

var flattenedParts = new List<string>();

// 步长为2遍历:每次取哈希字符串 + 对应的文件列表数组
for (int i = 0; i < filesArray.Count; i += 2)
{
    // 提取当前组的文件哈希
    string fileHash = filesArray[i].Value<string>();
    // 提取当前组的文件列表
    JArray fileList = (JArray)filesArray[i + 1];

    // 遍历每个文件条目,提取需要的字段
    foreach (JArray fileEntry in fileList)
    {
        string fileName = fileEntry[0].Value<string>();
        // 用long存储文件大小,避免大文件溢出int范围
        long fileSize = fileEntry[1].Value<long>();
        
        flattenedParts.Add($"{fileHash} {fileName} {fileSize}");
    }
}

// 拼接成最终的空格分隔字符串
string finalOutput = string.Join(" ", flattenedParts);
Console.WriteLine(finalOutput);

代码说明:

  1. 解析JSON:用JObject.Parse把原始JSON字符串转换成可操作的JSON对象,摆脱强类型的束缚。
  2. 遍历交替数组:因为files是哈希和文件列表交替的结构,所以遍历的时候步长设为2,每次处理一组(哈希+文件列表)。
  3. 提取目标字段:每个文件条目是一个无命名数组,我们直接按索引取第0位的文件名和第1位的文件大小即可。
  4. 健壮性优化:如果JSON格式可能存在异常,可以加一些类型检查(比如判断filesArray[i]是否是JValue,filesArray[i+1]是否是JArray),避免运行时崩溃。

这种方式不需要定义复杂的强类型类,完全适配这种无命名的交替数组结构,能快速得到你需要的展平格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:06:18