将XML String转换为JSON对象时,前一个0将被删除

时间:2016-07-22 17:01:05

标签: java json xml

我在将XML字符串转换为JSON中的Java对象时遇到了一个奇怪的问题。我使用org.json.jar来构造JSON对象,但如果其中一个xml标记包含数字,从0开始,那个数字在JSON对象中出现错误。

有人可以帮我解决这个问题吗?请在下面找到我用来将XML字符串转换为JSON的方法,并且我还提供了输入和输出。

方法

public static String toJSON(String xml) {
    String json = null;
    try {
        JSONObject jobj = XML.toJSONObject((String)xml);
        json = jobj.toString();

    }catch (JSONException e) {
        System.out.println("Json Exception " + (Object)e);
    }
    return json;
}

输入

<box>0X</box> <number>012345</number>

输出: 转换为Json后:{“number”:“5349”,“box”:“0X”}

XML中,我将号码设为012345,但在JSON中,它显示为5349!我期待JSON中的012345。

对此的任何帮助都会非常有帮助。提前谢谢。

2 个答案:

答案 0 :(得分:1)

similar question。问题在于stringToValueorg.json.XML方法的实施。

要禁用自动转换为int / long,这将删除前导零,您可以将字符串值放在CDATA中然后它将起作用。例如输入可以是:

<box>0X</box><number><![CDATA[012345]]></number>

答案 1 :(得分:0)

5349是Octal 12345的十进制表示。

请参阅以下行,以了解您可能的不同之处(使用Java-7 / org.json.json-20160212.jar)。

    String regularString = "<box>0X</box> <number>012345</number>";
    System.out.println(toJSON(regularString));
    Integer anOctal = 012345;
    String withOctalString = "<box>0X</box> <number>" + anOctal + "</number>";
    System.out.println(toJSON(withOctalString));

用String替换八进制样式的Integer / int应该有助于解决您的问题。