我有一个php文件,我从数据库中检索数据,然后将其转换为数组,然后对其进行编码,因此我正在开发的Android应用程序获取JSONArray解析它,并获取数据。
这是php文件:
<?php
$response = array();
// include db connect class
require_once __DIR__ . '/db_connect.php';
// connecting to db
$db = new DB_CONNECT();
$dbh = $db->connect(); // here you get the connection
$query = "SELECT *FROM lost_pets";
$result = $dbh->prepare($query);
$result->execute();
if ($result->fetchAll() > 0) {
foreach($dbh->query($query) as $row){
$pet["id"] = $row['id'];
$pet["name"] = $row['name'];
$pet["breed"] = $row['breed'];
$response["pet"] = array($pet);
echo json_encode($response);
}
}
?>
结果如下:
{"pet":[{"id":"1","name":"Prueba","breed":"Yorkshire Terrier"}]}{"pet":[{"id":"2","name":"Prueba2","breed":"German Shepherd"}]}{"pet":[{"id":"3","name":"Prueba3","breed":"Beagle"}]}
问题是,当我在Android中检索JSONObject并执行getJSONArray()时,而不是给我3个数组,我只是得到了上面的结果。
我真的对PHP没有很好的理解,但是根据php文档,我看不出我做错了什么。 我非常接近完成应用程序,这是我现在无法解决的唯一一个大问题,这真的让我心烦意乱。谢谢!
编辑: JSONParser
else if(method.equals("GET")){
// request method is GET
if (sbParams.length() != 0) {
url += "?" + sbParams.toString();
}
try {
urlObj = new URL(url);
conn = (HttpURLConnection) urlObj.openConnection();
conn.setDoOutput(false);
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept-Charset", charset);
conn.setConnectTimeout(15000);
conn.connect();
is = conn.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + '\n');
}
is.close();
json = sb.toString();
System.out.println(json.toString() + "This is the json");
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}catch (NullPointerException ex){
System.out.println("No internet");
}
return jObj;
}
conn.disconnect();
return jObj;
}
答案 0 :(得分:2)
你需要array_push,其中$ pet被推入数组并打印该数组。 使用中,
<?php
$arr=array();
foreach($dbh->query($query) as $row){
$pet["id"] = $row['id'];
$pet["name"] = $row['name'];
$pet["breed"] = $row['breed'];
$response["pet"] = array_push($arr,$pet);
}
print_r($arr);
?>
答案 1 :(得分:1)
你需要对最终的数组结构进行一次编码,你的循环中的编码最终导致无效的json,因为你将有多个连接的json字符串。
最简单的方法是只选择你想要的字段:
$query = "SELECT id, name, breed FROM lost_pets";
$result = $dbh->prepare($query);
$result->execute();
echo json_encode($result->fetchAll(PDO::FETCH_ASSOC));
exit;
如果你需要一个pet
或pets
密钥,你可能需要一个循环,但你可以一次分配行;无需分配单个字段。
答案 2 :(得分:1)
我在我的所有应用程序中使用了以下函数来从php&amp;获取数据json数组。试试这个。
public void ParseJsonArray(json){ //json is the json array you got. pass it to this function. this can get specific data from json array.
try {
JSONArray jsonArray = json.getJSONArray("pet"); //get all data
int count = 0;
//if you have more columns & you want to get specific columns.
while (count<jsonArray.length()){
JSONObject JO = jsonArray.getJSONObject(count); //get data row by row.
String s1 = JO.getString("id"); //get id value to string s1.
String s2 = JO.getString("name"); //get name to string s2.
String s3 = JO.getString("breed"); //get breed to string s3.
count++; }
} catch (JSONException e) {
e.printStackTrace(); }
}