XML到JSON产生不希望的结果

时间:2016-04-03 19:18:59

标签: java json xml org.json

我正在使用org.json库,如下所示,从XML转换为JSON

  <dependency>
      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>20160212</version>
  </dependency>

一个简单的测试用例显示了我遇到的问题,请参阅以下内容: -

我有以下XML

<record>
  <name>A108B</name>
</record>

反过来产生

{"record": { "id": "A108B" }}

大!如果id 1111

,则会出现此问题

使用以下代码

XML.toJSONObject(xml...)

我得到了

{"record": { "name": 1111 }}

我实际上更喜欢将值保留为所有字符串,即用户标识符。我不希望输出发生变化,具体取决于标识符是否恰好没有字符。

有什么方法可以强迫org.json这样做吗?我可以分叉代码并为自己做一个更改,但我希望这是其他人遇到的问题并且有解决方案。

2 个答案:

答案 0 :(得分:1)

这似乎可以解决问题,我不得不覆盖JSONTokener的nextValue

    String xml = "<test>111</test>";
    JSONObject json = XML.toJSONObject(xml);
    JSONTokener tokener = new JSONTokener(json.toString()) {
        public Object nextValue() throws JSONException {
            Object nextValue = super.nextValue();
            if (nextValue instanceof Number) {
                Number value = (Number) nextValue;
                return value.toString();
            }
            return nextValue;
        }
    };
    json = new JSONObject(tokener);
    System.out.println(json.toString());

输出:{"test":"111"}

答案 1 :(得分:0)

XML.toJSONObject(...)在内部调用static Object stringToValue(String string)总是尝试将值转换为BooleanJSONObject.NullLong和{ {1}}首先,仅在所有转化尝试都失败时返回Double。似乎没有(简单)的方法。

您可以在阅读时简单地转换值:

,而不是分叉或做一些反射魔术
String