【问题标题】:Getting Null from JSON Data encoded in PHP, outputting to Java从用 PHP 编码的 JSON 数据获取 Null,输出到 Java
【发布时间】:2013-02-05 02:41:05
【问题描述】:

我在 PHP 中的 JSON 输出是这样完成的:

 print json_encode(array('rate' => $topcat, 'hometown' => $hometown, 'talk' => $talk));

我的 JSON 输出在我的浏览器中如下所示:

{"rate":"Movies","hometown":"Seattle, WA","talk":"Movies"}

在 Java/Android 中我这样做:

protected void onPostExecute(Void v) {

    try {
        JSONArray jArray = new JSONArray(result);
        JSONObject json_data = null;
        for (int i = 0; i < jArray.length(); i++) {
            json_data = jArray.getJSONObject(i);


            Hometown = json_data.getString("hometown");
            FavCategory = json_data.getString("rate");              
            Talk = json_data.getString("talk");



        }
    } catch (JSONException e1) {

    } catch (ParseException e1) {
        e1.printStackTrace();
    }

    if (Hometown.equals("")) {
        Hometown = "Not Specified";
    }

    tvHometown.setText(Hometown);
    tvRate.setText(FavCategory);
    tvTalk.setText(Talk);

    Log.d("Log: ", Hometown + " " + FavCategory + " " + Talk);

}

}

在那个日志上,我得到了这个:Seattle, WA, null, null

谁能明白为什么?

编辑:新的 Java 代码,仍然出现错误:

String homeTown = "", favCategory = "", favTalk = "";
        try {
            JSONObject jsonData = new JSONObject(result);

            homeTown = jsonData.getString("hometown");
            favCategory = jsonData.getString("rate");
            favTalk = jsonData.getString("talk");


            tvHometown.setText(homeTown);
            tvRate.setText(favCategory);
            tvTalk.setText(favTalk);




} catch (JSONException e1) {

    } catch (ParseException e1) {
        e1.printStackTrace();
    }

我遇到了一个异常:

02-05 08:51:48.078: E/log_tag(22958): Error in http connection org.json.JSONException: Value null of type org.json.JSONObject$1 cannot be converted to JSONArray

【问题讨论】:

  • 使用新代码,你得到的是null,还是代码抛出了异常?具体是哪一行?
  • @MattBall 好的,也许 null 是错误的。如上所示,我收到了 JSONException(刚刚添加)。
  • 我在您的代码中没有看到任何关于 JSONArray 的内容。您确定您的应用运行的代码实际上就是问题所在吗?
  • 我想我刚刚在 PHP 方面抓到了一些东西......会在几分钟内告诉你......
  • @MattBall 知道了!当我编码时,它以某种方式从 PHP 端的 print 更改为 echo... 标记你是正确的!

标签: java php android json


【解决方案1】:

尽管the PHP vocabulary,这个 JSON 的顶级元素:

{"rate":"Movies","hometown":"Seattle, WA","talk":"Movies"}

an object (a key-value mapping), not an array{}s 是一个死的赠品。

改变这个

JSONArray jArray = new JSONArray(result);

到这里:

JSONObject jsonData = new JSONObject(result);

然后从那里出发:

String hometown = jsonData.getString("hometown");
String favCategory = jsonData.getString("rate");              
String talk = jsonData.getString("talk");

注意as a matter of good Java style,我如何使用lowerCamelCased 变量名。

【讨论】:

    【解决方案2】:

    你应该有一个方括号来表示它是一个 JSONArray 你的结果在 JSONObject 如果你想获取每个 JSONArray 的数据你的结果应该更像这样

    {"rate": ["samplevalue","samplevalue"],"Movies" : ["samplevalue","samplevalue"],"hometown":["Seattle, WA"],"talk":["Movies"]}
    

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      相关资源
      最近更新 更多