gpt4 book ai didi

php - 在 php 中创建 JSON 数组并在 android 中对其进行解码。组织.json.JSONException : No value for id

转载 作者:行者123 更新时间:2023-11-30 02:19:37 24 4
gpt4 key购买 nike

我使用下面的代码在 php 中创建 json 数组

$jsonData      = array();
$jsonTempData = array();
$count=0;
$result = $link->query($sql);

if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$jsonTempData['id']=$row['_id'];
$jsonTempData['title']=$row['title'];

$jsonData[$count++]=json_encode($jsonTempData);

}
}
$link->close();
$outputArr = array();

$outputArr['Android']=$jsonData;

print_r( json_encode($outputArr));

并通过以下代码在android中解码

 jsonResponse = new JSONObject(Content);
JSONArray array = jsonResponse.optJSONArray("Android");

for(int i=0;i<array.length();i++){
nm.set_id(array.getJSONObject(i).getInt(DBHelper.ID));

nm.setTitle(array.getJSONObject(i).getString(DBHelper.TITLE));
}

但是我在android中得到了这个异常

: org.json.JSONException: No value for id

问题是什么?如何解决这个问题?

我的目标是在 php 中创建二维数组并将其转换为 JSON 对象数组以在 android 中提取。

最佳答案

问题是由于 array 的 JSON Parsing Exception 引起的

JSONException:类型 java.lang.String 的值无法转换为 JSONObject

修复:

我没有直接将数组更改为 JSON 对象,而是先将数组项更改为字符串,然后再将其更改为 JSON 对象

在下面的代码中,我已将您的代码更改为可以工作:

 jsonResponse = new JSONObject(Content);

JSONArray array = jsonResponse.optJSONArray("Android");

for(int i=0;i<array.length();i++){

String strJSON=array.getString(i);

JSONObject jsonObj = new JSONObject(strJSON);

nm.set_id(jsonObj.getInt(DBHelper.ID));

nm.setTitle(jsonObj.getString(DBHelper.TITLE));
}

这是我试过的完整示例,以备不时之需

php部分(test.php)

 <?php
header('Content-type=application/json; charset=utf-8');
$jsonData = array();
$jsonTempData = array();

$jsonTempData['id']="id1";
$jsonTempData['title']="title1";

$jsonData[0]=json_encode($jsonTempData);

$jsonTempData['id']="id2";
$jsonTempData['title']="title2";

$jsonData[1]=json_encode($jsonTempData);

$outputArr = array();

$outputArr['Android']=$jsonData;

print_r(json_encode($outputArr));

?>

结果 JSON:

["{\"id\":\"id1\",\"title\":\"title1\"}","{\"id\":\"id2\",\"title\":\"title2\"}"]

安卓部分:

DefaultHttpClient httpClient = new DefaultHttpClient();

HttpGet req = new HttpGet("http://localhost/test.php");

HttpResponse response;
try {
response = httpClient.execute(req);
if (response.getStatusLine().getStatusCode() == 200) {

String result;
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"), 8);
StringBuilder sb = new StringBuilder();

String line = null;
while ((line = bufferedReader.readLine()) != null) {
sb.append(line + "\n");
}
result = sb.toString();
Log.d("result:",result.toString());

JSONObject jsonResponse = new JSONObject(result);
JSONArray array = jsonResponse.optJSONArray("Android");

for(int i=0;i<array.length();i++){
String strJSONobj=array.getString(i);
JSONObject json = new JSONObject(strJSONobj);
Log.d("result",json.getString("id"));
Log.d("result",json.getString("title"));
}


}
} catch (ClientProtocolException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} // ClientProtocolException

希望对你有帮助

关于php - 在 php 中创建 JSON 数组并在 android 中对其进行解码。组织.json.JSONException : No value for id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28797196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com