1

我正在使用org.json将大 xml 转换为 json 字符串。然而,对于数字 0,它似乎创建了一个字符串“0”,而其他数字(如 5 或 2)工作正常并成为实数。

xml:

<w count="2" winline="5" freespins="0" jackpot="false" start="0" payout="500" supergames="0" />

爪哇:

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 数字而不是字符串?

4

2 回答 2

3

这是将XML 属性转换为 JSON 值的代码片段。

我可能是错的,但不处理值为“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) {
        }
于 2011-02-08T13:23:29.300 回答
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”。(信用@bestsss)
于 2011-02-08T13:24:38.597 回答