为什么org.json.JSONObject的getLong和getString的值会不一样?

发布于 2021-11-18 00:45:22 字数 1090 浏览 479 评论 3

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:3537275240990320128
getString的值 为
3537275240990320342
而getLong的值 却为:

3537275240990320128

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

各自安好 2021-11-24 12:04:47

找到问题原因了,JSON.toLong()有问题,至少Android 4.3 SDK源码里面都还有问题:

static Long toLong(Object value) {
    if (value instanceof Long) {
        return (Long) value;
    } else if (value instanceof Number) {
        return ((Number) value).longValue();
    } else if (value instanceof String) {
        try {
            return (long) Double.parseDouble((String) value);
        } catch (NumberFormatException ignored) {
        }
    }
    return null;
}

居然用的是Double.parseDouble()

爱的故事 2021-11-24 06:04:00

补充下  新版本的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.");

        }

    }

我这边做了测试了

背叛残局 2021-11-24 05:41:17

Android的一个bug,调试进JSONObject的源码

public long getLong(String name) throws JSONException {
    Object object = get(name);
    Long result = JSON.toLong(object);
    if (result == null) {
        throw JSON.typeMismatch(name, object, "long");
    }
    return result;
}

错误出在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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文