为什么org.json.JSONObject的getLong和getString的值会不一样?
android环境下,使用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:3537275240990320128getString的值 为
3537275240990320342而getLong的值 却为:
3537275240990320128
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
找到问题原因了,JSON.toLong()有问题,至少Android 4.3 SDK源码里面都还有问题:
居然用的是Double.parseDouble()
补充下 新版本的json getLong方法已经修复这个bug:
public long getLong(String key) throws JSONException {
Object object = this.get(key);
try {
return object instanceof Number ? ((Number) object).longValue()
: Long.parseLong((String) object);
} catch (Exception e) {
throw new JSONException("JSONObject[" + quote(key)
+ "] is not a long.");
}
}
我这边做了测试了
Android的一个bug,调试进JSONObject的源码
错误出在JSON.toLong(object)
,看后面的答复。
字符串转long的时候要出错,为了避免出错你可以有这样几个方法:
1、不用String,直接 "channel_id":3537275240990320342,
2、Long.parseLong(params.getString("channel_id"))
3、用JSON-java的新代码:https://github.com/douglascrockford/JSON-java
4、用Google另外的gosn:https://code.google.com/p/google-gson/downloads/list