我在将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。
对此的任何帮助都会非常有帮助。提前谢谢。
答案 0 :(得分:1)
见similar question。问题在于stringToValue
中org.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应该有助于解决您的问题。