无法从JSONArray获取JSONObject

时间:2016-05-06 20:46:51

标签: java php android mysql database

我的php:

 <?php

 $con=mysqli_connect("localhost","xxx","xxx","xxx");

 $result = mysqli_query($con, "SELECT username, x,y FROM user");

 $jsonData = array();
while($array = mysqli_fetch_assoc($result)){
$jsonData[] = $array;
}

echo json_encode($jsonData);


mysqli_close($con);
?>

我获取的数据到JSONArray:[{"username":"one","x":"22.","y":"55"},{"username":"two","x":2,"y":5}]

Android代码:

        //Connect to mysql.
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost("http:example.com/fetchCoordinates.php");

        //Getting response
        HttpResponse response = httpClient.execute(httpPost);
        String responseBody = EntityUtils.toString(response.getEntity());

        //Trying to get fetch from array.
        JSONArray array = new JSONArray(responseBody);
        JSONObject jsonObject = array.getJSONObject(0);
        double x = jsonObject.getDouble("x");

Eror:

  

org.json.JSONArray无法转换为JSONObject

它不起作用。我坚持了下来。

3 个答案:

答案 0 :(得分:0)

您的JSON有效,但您的问题是它不包含JSONObject。它只是一个字符串数组的数组。要实际获取JSONObjects,它需要是一个实际JSONObjects的数组。尝试将数据格式化为:

[{
    "name": "one",
    "num1": "22",
    "num2": "55"
}, 
{
    "name": "two",
    "num1": "2",
    "num2": "5"
}]

请注意,括号[]中包含的数组包含逗号分隔的JSONObject,它们是大括号{}中包含的键值对。

您应该阅读有关如何正确格式化JSON的信息。这是一个很好的资源:http://www.w3schools.com/json/default.asp

另请参阅此答案以获取一些有用的信息: How do you represent a JSON array of strings?

答案 1 :(得分:0)

要从数组创建一个json对象,该数组必须是关联的,因此您可以将代码更改为此类以实现该目标。

  while($array = mysqli_fetch_assoc($result)){
       $jsonData[] = $array;
  }

答案 2 :(得分:0)

问题出在我的PHP代码中。

出了什么问题:

while($array = mysqli_fetch_rows($result)){
   $jsonData[] = $array;}

什么是正确的:

while($array = mysqli_fetch_assoc($result)){
   $jsonData[] = $array;}

为什么?

  

第一个方法(fetch_rows)没有给我JSONArray和JSONObjects   在里面,但我得到了带有JSONStrings的JSONArray。

     

在java代码中,我试图从JSONArray接收JSONObject,但我是   得到错误,因为没有任何对象(有字符串)。