2011-02-08 83 views
1

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

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号码,而不是字符串?

+1

XML属性有字符串类型。 XML返回字符串,JSON按原样获取它们。 – kirilloid 2011-02-08 13:07:49

+1

@kirilloid:那么,为什么它对0以外的数字有效? – clamp 2011-02-08 13:11:13

+0

FWIW:我已付出github上JSON和固定的bug:https://github.com/matthiasgrumet/JSON-java – clamp 2011-02-09 16:15:14

回答

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. 报告快速修复bug和希望。
  2. 现在就自己修复它自己的文件副本。
  3. 如果你的情况可以代替0接受0.0,然后Munge时间的“0”的在XML是‘0.0’的。 (信贷@bestsss)
3

这里是转换XML属性为JSON值snippet of code

我可能是错的,但如果该值为“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) { 
     } 
相关问题