我正在为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"));
}
}
感谢您的帮助,在此先感谢您!