这样的代码:
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的String?
答案 0 :(得分: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
时的价值完全相同
答案 1 :(得分:0)
原因很简单......您的JSON包含channel_id
的值作为字符串类型...如果您确定channel_id
类型为long ... 删除double引号表单值channel_id
。
你的新JSON看起来像,
{
"response_params":
{
"appid":"1071410",
"channel_id":3537275240990320342, // here
"user_id":"714893193627619861"
},
"request_id":1293438498
}
看看这些examples。
希望这会有所帮助......