我正在使用org.json将大型xml转换为json字符串。但似乎对于数字0它创建一个字符串“0”,而其他数字如5或2工作正常并成为实数。
的xml:
<w count="2" winline="5" freespins="0" jackpot="false" start="0" payout="500" supergames="0" />
的java:
JSONObject json = XML.toJSONObject(xml);
String jsontext = json.toString();
结果json:
"w":[{"supergames":"0","freespins":"0","winline":5,"count":2,"start":"0","jackpot":false,"payout":500}
有没有办法让0成为真正的0数而不是字符串?
答案 0 :(得分:3)
以下是将snippet of code转换为JSON值的<{3}}。
我可能错了,但是没有处理值为“0”的情况。
try {
char initial = string.charAt(0);
boolean negative = false;
if (initial == '-') {
initial = string.charAt(1);
negative = true;
}
if (initial == '0' && string.charAt(negative ? 2 : 1) == '0') {
return string;
}
if ((initial >= '0' && initial <= '9')) {
if (string.indexOf('.') >= 0) {
return Double.valueOf(string);
} else if (string.indexOf('e') < 0 && string.indexOf('E') < 0) {
Long myLong = new Long(string);
if (myLong.longValue() == myLong.intValue()) {
return new Integer(myLong.intValue());
} else {
return myLong;
}
}
}
} catch (Exception ignore) {
}
答案 1 :(得分:3)
看起来像个错误。我查看了源代码,它看起来可能会抛出IndexOutOfBoundsException
,这基本上导致转换为数字失败:
https://github.com/douglascrockford/JSON-java/blob/master/XML.java(第327行):
if (initial == '0' && string.charAt(negative ? 2 : 1) == '0') {
如果字符串以“0”开头并且只有1个字符长,则抛出,即如果字符串为“0”。捕获异常并且转换方法基本上只返回原始字符串(“0”)再次未转换。
选择不多:
0.0
代替0
,那么将XML中的“0”强制为“0.0”。 (credit @bestsss)