2013-08-21 40 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。 –

相关问题