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

使用org.json将XML转JSON时,如何确保countries始终为数组?

解决org.json XML转JSON时单元素数组被转为对象的问题

这个问题在使用org.json处理XML转JSON时很常见——当XML中某个本应是数组的节点只有单个子元素时,转换器会默认把它转成JSONObject而非JSONArray。这里有几个靠谱的解决办法:

方法一:转换后手动修正字段

如果无法修改输入的XML内容,最直接的方式是在转换完成后,手动检查并修正countries字段的类型:

JSONObject xmlJSONObj = XML.toJSONObject(xsltresponse);
JSONObject dataObj = xmlJSONObj.getJSONObject("data");

// 检查countries是否是单个对象
if (dataObj.get("countries") instanceof JSONObject) {
    JSONObject singleCountry = dataObj.getJSONObject("countries");
    JSONArray countriesArray = new JSONArray();
    countriesArray.put(singleCountry);
    // 替换原字段为数组
    dataObj.put("countries", countriesArray);
}

return xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR);

这种方法灵活,不需要修改XML源数据,适合处理固定字段的场景。

方法二:修改XML添加数组标记

如果你能控制XML的生成,可以在countries节点上添加json:array="true"属性,org.json的XML转换器会识别这个标记,强制将该节点转为数组,无论子元素数量多少:

<data xmlns:json="http://json.org">
  <name>Microsoft</name>
  <date>today</date>
  <countries json:array="true">
    <name>AN</name>
  </countries>
</data>

注意需要在根元素声明json命名空间,否则转换器可能会把这个属性当作普通字段保留。这种方法一劳永逸,适合长期维护的场景。

方法三:自定义XML转换逻辑(进阶)

如果你的业务中有大量类似的数组字段需要处理,可以扩展org.json的XML类,重写其解析逻辑,让它默认将指定的节点识别为数组。不过这种方法复杂度较高,适合有大量重复需求的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:36:10