2011-02-08 48 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) { 
     } 
相關問題