JSONObject中的Java / Android JSONArray返回null

时间:2018-09-27 20:13:23

标签: java php json

我正在为Android开发与服务器通信并从其接收JSON响应的应用程序。最近,我更改了响应结构,以包含有关请求的更多信息。

最初,我的响应是通过php函数json_encode将mysqli_query的响应编码为JSON的,并且看起来像这样:

[
  {"id":"31","description":"Hello"},
  {"id":"32","description":"World"},
]

要检索对象,我只需通过调用 my_json_array = new JSONArray(response)并对其进行迭代来创建一个新的JSONArray对象。

但是现在,我的新回复包含其他数据,如下所示:

{  
  "error":false,
  "idCode":0,
  "message":[  
    {  
      "id":"32",
      "description":"Hello"
    },
    {  
      "id":"31",
      "description":"World"
    }
  ]
} 

现在,据我所知,我需要将此响应转换为JSONObject,然后通过调用 my_json_object.getJSONArray(“ message”); 将消息提取为JSONarray对象。 我可以正常地从“错误”和“ idCode”字段中提取数据,但是当我尝试从“消息”中提取JSONArray时,它返回null,除了NullPointerException外,不会引发任何异常。

我已经验证了JSON字符串here,转义了Java可能有问题的字符,例如双引号,删除了大写字母,将响应写为单行,删除了“ id”周围的双引号。值,使用单引号而不是双引号,使用经编码的字符串而不是服务器的响应,检查字符串的unicode表示以查看是否包含任何无效字符(看起来好像没有),并且我不知道还要做些什么。需要注意的是:对象上的方法 toString()返回字符串“ null”,并且基于JSONObjects的toString()方法,问题似乎出自JSONStringer库,并且对类进行更深入的介绍,这似乎是一个嵌套问题,但我在JSON字符串中找不到任何问题。

代码的重要部分:

public String getResponse(){
  web_helper.sendRequest();
  //everything fine over here
  return web_helper.getResponse();
}

public void printData(){ throws JSONExpection
  JSONObject my_json_object=new JSONObject(getResponse());
  System.out.println("error: "+my_json_object.getBoolean("error"));
  System.out.println("idCode: "+my_json_object.getInt("idCode"));
  JSONArray my_json_array=my_json_object.getJSONArray("message");
  //not sure if the next part works because my_json_array is null
  for(int i=0; i<my_json_array.length(); i++){
    JSONObject obj=my_json_array.getJSONObject(i);
    System.out.println("id: "+obj.getInt("id"));
    System.out.println("description: "+obj.getString("description"));
  }
}

感谢您的帮助,在此先感谢您!

0 个答案:

没有答案