【问题标题】:Json value returns empty (when it's not) when parsing on Android在 Android 上解析时,Json 值返回空(如果不是)
【发布时间】:2016-03-31 17:10:41
【问题描述】:

我正在尝试在 Android 上读取此 json 字符串,但字段“thumbnail”总是返回空,即使它实际上从未为空,它应该返回一个 url 或“self”。

{
    "kind": "t3",
    "data": {
      "domain": "twitter.com",
      "banned_by": null,
      "media_embed": {},
      "subreddit": "nba",
      "id": "3y6vzw",
      "author": "Higgnkfe",
      "media": null,
      "score": 883,
      "approved_by": null,
      "over_18": false,
      "hidden": false,
      "num_comments": 811,
      "thumbnail": "http://b.thumbs.redditmedia.com/rfBhblr-DJIfsCEwQ9jq-wy_mHcmmedx3_Xy60STumc.jpg",
      "subreddit_id": "t5_2qo4s",
      "stickied": false,
      "from": null,
      "is_self": false,
      "from_id": null,
      "permalink": "/r/nba/comments/3y6vzw/first_all_star_results_are_in_kobe_steph_lead_the/",
      "created": 1451088664.0,
      "url": "https://twitter.com/nbaallstar/status/680417825463365632",
      "title": "First All Star Results are in; Kobe, Steph lead the vote",
      "created_utc": 1451059864.0,
      "ups": 883
    }  

这是我用来阅读的一段代码:

        String title, author, subreddit, id, thumbnail = "test", url;
        int score, numOfComments;
        double created;
        boolean isSelf;

        JSONArray arr = new JSONObject(raw).getJSONObject("data").getJSONArray("children");

        for (int i = 0; i < arr.length(); i++) {
            JSONObject data = arr.getJSONObject(i).getJSONObject("data");

            Log.d("LOADER", "JSON: " + data.toString());

            title = data.getString("title");
            author = data.getString("author");
            subreddit = data.getString("subreddit");
            id = data.getString("id");
            thumbnail = data.getString("thumbnail");
            score = data.getInt("score");
            Log.d("LOADER", " thumb: " + thumbnail); // log shows "thumb:" only
            url = data.getString("url");
            created = data.getDouble("created");
            isSelf = data.getBoolean("is_self");
            numOfComments = data.getInt("num_comments");

            Post post = new Post(subreddit, title, author, url, id, score, numOfComments,
                     thumbnail, created, isSelf);

            posts.add(post);
        }  

我在阅读任何其他字段时都没有问题,即使是“url”字段也包含一个 url,所以不可能是这样......

这是 data.toString() 的日志显示的内容:

JSON: {"domain":"self.nba","banned_by":null,.....(etc etc etc).......,"id":"3y46dt","num_comments":787,"thumbnail":"","subreddit_id":"t5_2qo4s","is_self":true,"from_id":null,"url":"https:\/\/www.reddit.com\/r\/nba\/comments\/3y46dt\/trash_talk_thread_no_games_today_because_of\/","author_flair_text":"[TOR] Luis Scola"....etc  

如您所见,“thumbnail”的值为“”,但“url”确实有一个url。

这里发生了什么?

这是我从中获取 json 字符串的 url,以防它有用 http://www.reddit.com/r/nba/.json

【问题讨论】:

    标签: java android json reddit


    【解决方案1】:

    我自己查过,你的代码没有问题。事实上,你得到的 json 包含 thumbnailempty 值。我访问了您提供的 链接开始 3 个数组包含 thumbnail 的空值。所以你的代码是正确的,它与 thumbnail 的值无关,无论是 url 还是其他值。

    【讨论】:

    • 你用的是什么浏览器?当我用 Chrome 打开它时,它要么是“自我”,要么是一个 url。我检查了 IE,但下载的文件显示一个空值。我想 Android 也是如此。
    • @JorgeGil 我使用 chrome 和 jsonformatter.curiousconcept.com 格式化 json 以便清楚地看到它。
    • 如果我使用 Chrome 并将输出复制并粘贴到您发布的网站,我会得到“thumbail”的值,但如果我只是将 url 直接粘贴到网站我没有任何价值,我不知道发生了什么……
    • @JorgeGil 我刚刚再次检查,它是空的,但是有一些键,例如 "thumbnail_url",其值为 "i.embed.ly/1/…"。您确定您没有将缩略图与 "thumbnail_url" 混淆。
    • 原来我们都是对的......有点。显然,subreddit 版主(在这种情况下是 /r/NBA)能够在用户未登录时禁用缩略图。这就是我获取值(我已登录)而你没有(你没有)的原因t 登录)。
    猜你喜欢
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    相关资源
    最近更新 更多