json.org零保存为字符串而不是数字

时间:2011-02-08 13:00:59

标签: java xml json org.json

我正在使用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数而不是字符串?

2 个答案:

答案 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”)再次未转换。

选择不多:

  1. 报告错误并希望快速修复。
  2. 暂时自行修复您自己的文件副本。
  3. 如果您的情况可以接受0.0代替0,那么将XML中的“0”强制为“0.0”。 (credit @bestsss)