2013-08-21 38 views
2

這樣的代碼:爲什麼org.json.JSONObject getLong和GetString不等於

 JSONObject contentObject = new JSONObject(content); 
    JSONObject params = contentObject.getJSONObject("response_params"); 
    Log.d("onTest", "channel_id:" + params.getString("channel_id")); 
    Log.d("onTest", "channel_id:" + params.getLong("channel_id")); 

日誌打印:

08-21 12:46:21.470: DEBUG/onTest(25228): onMessage: content : {"response_params":{"appid":"1071410","channel_id":"3537275240990320342","user_id":"714893193627619861"},"request_id":1293438498} 
    08-21 12:46:21.480: DEBUG/onTest(25228): channel_id:3537275240990320342 
    08-21 12:46:21.480: DEBUG/onTest(25228): channel_id:3537275240990320128 

爲什麼getLong與價值3537275240990320128,但價值3537275240990320342獲取字符串?

+0

你能說明實際內容是什麼嗎? – Tishka17

回答

5

作爲每文檔here

public long getLong (String name) 

如果存在,是一個長,或者可以是 強制轉換爲長按名稱返回映射的值。請注意,JSON表示數字爲雙打,因此 這是有損的;使用字符串通過JSON傳輸數字。

編輯: 要看到自己,你可以做到這一點

JSONObject json = new JSONObject(); 
try { 
    json.put("test", "3537275240990320342"); 
    String str = json.getString("test"); 
    double dou = Double.parseDouble(str); 
    long lo = (long) dou; 
} catch (JSONException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

您將看到的lo值是當你做getLong

+0

@keepcleargas我認爲,這是你正在接受的價值背後的正確原因。 –

+0

我明白了,你是對的。 – keepcleargas

+0

嗯...它的GUD答案... :) –

0

原因你得到什麼很簡單...你的JSON包含值爲channel_id作爲字符串類型...如果你確定你有channel_id是long類型的... 刪除雙引號表格值爲channel_id

YUR新的JSON的樣子,

{ 
    "response_params": 
     { 
      "appid":"1071410", 
      "channel_id":3537275240990320342, // here 
      "user_id":"714893193627619861" 
     }, 
    "request_id":1293438498 
} 

看一看這些examples

希望這可以幫到....

+0

感謝umair.ali,我明白了。 – keepcleargas

+0

@ umair.ali:你無法按照上面的建議去做,因爲這個值對於int來說太大了。在使用JSON之前,您需要將它轉換爲'double'(原因在文檔中已經提到)。這就是爲什麼將它作爲'String'傳遞的原因。 – Rajeev

+0

@Rajeev:這可能大於int ...但不長,因爲long的最大值是9,223,372,036,854,775,807。 –

相關問題