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

XML转JSON时如何移除嵌套数组中的对象定义,保留数组结构?

XML转JSON时如何保留纯净二维数组结构

问题详情

给定XML内容:

<root xmlns:json='http://james.newtonking.com/projects/json'>
   <majorDimension>ROWS</majorDimension>
   <range>Sheet6!A1:B2</range>
   <values json:Array='true'>
      <element json:Array='true'>
         <element>Good</element>
         <element>Value</element>
      </element>
      <element json:Array='true'>
         <element>Hello</element>
         <element>World</element>
      </element>
   </values>
</root>

使用Newtonsoft.Json的代码序列化:

var json = JsonConvert.SerializeXmlNode(xmlDoc, Newtonsoft.Json.Formatting.None, true);

得到的JSON包含多余的嵌套对象:

{
    "majorDimension": "ROWS",
    "range": "Sheet6!A1:B2",
    "values": [
                  { "element": [ [ "Good", "Value" ],
                                 [ "Hello", "World" ] ]
                  }
              ]
}

期望输出的JSON需要去掉values中的嵌套对象,保留纯净二维数组:

{
  "range": "Sheet6!A1:B2",
  "majorDimension": "ROWS",
  "values": [
    [
        "Good",
        "Value"
    ],
    [
        "Hello",
        "World"
    ]
  ]
}

解决方案

方案1:调整XML结构(推荐)

问题根源在于XML中values节点的数组标记方式,以及内层element的嵌套逻辑。修改XML,用json:Array标记内层的数组节点,而非给element加标记:

<root xmlns:json='http://james.newtonking.com/projects/json'>
   <majorDimension>ROWS</majorDimension>
   <range>Sheet6!A1:B2</range>
   <values json:Array='true'>
      <json:Array>
         <element>Good</element>
         <element>Value</element>
      </json:Array>
      <json:Array>
         <element>Hello</element>
         <element>World</element>
      </json:Array>
   </values>
</root>

重新序列化后,就能直接得到期望的二维数组结构。

方案2:序列化后修正JSON结构

如果无法修改原始XML,可在序列化后通过JObject调整结构:

// 序列化得到原始JSON
var rawJson = JsonConvert.SerializeXmlNode(xmlDoc, Newtonsoft.Json.Formatting.Indented, true);
var jsonObj = JObject.Parse(rawJson);

// 提取嵌套的element数组,替换原values节点
jsonObj["values"] = jsonObj["values"][0]["element"];

// 生成最终JSON
var finalJson = jsonObj.ToString(Newtonsoft.Json.Formatting.Indented);

这段代码会把values里的嵌套数组提取出来,替换掉多余的对象包装,得到目标格式。

方案3:自定义序列化转换器

如果需要处理大量类似XML,可以自定义XmlNodeConverter,重写节点转换逻辑,让values下的element直接转为数组元素。这种方式适合通用场景,但实现相对复杂。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:40:28