1

我的 PHP 代码是这样的:

$userdetails = mysqli_query($con, "SELECT *FROM aircraft_status"); 

#$row = mysql_fetch_row($userdetails) ;

while($rows=mysqli_fetch_array($userdetails)){
$status[]= array($rows['Aircraft']=>$rows['Status']);
}
#Output the JSON data
echo json_encode($status); 

并给出:

[{"A70_870":"1"},{"A70_871":"1"},{"A70_872":"1"},{"A70_873":"1"},{"A70_874":"1"},{"A70_875":"1"},{"A70_876":"2"},{"A70_877":"1"},{"A70_878":"2"},{"A70_879":"2"},{"A70_880":"2"},{"A70_881":"0"},{"A70_882":"0"},{"A70_883":"0"},{"A70_884":"0"},{"A70_885":"0"}]

读取它的java代码是这样的:

// Create a JSON object from the request response
    JSONObject jsonObject = new JSONObject(result);

    //Retrieve the data from the JSON object
        n870 = jsonObject.getInt("A70_870");
        n871 = jsonObject.getInt("A70_871");
        n872 = jsonObject.getInt("A70_872");
        n873 = jsonObject.getInt("A70_873");
        n874 = jsonObject.getInt("A70_874");
        n875 = jsonObject.getInt("A70_875");
        n876 = jsonObject.getInt("A70_876");
        n877 = jsonObject.getInt("A70_877");
        n878 = jsonObject.getInt("A70_878");
        n879 = jsonObject.getInt("A70_879");
        n880 = jsonObject.getInt("A70_880");
        n881 = jsonObject.getInt("A70_881");
        n882 = jsonObject.getInt("A70_882");
        n883 = jsonObject.getInt("A70_883");
        n884 = jsonObject.getInt("A70_884");
        n885 = jsonObject.getInt("A70_885");

当我运行我的 android 应用程序时,我似乎不断收到错误消息:

"of type org.json.JSONArray cannot be converted into Json object"

但是,当我发送不带方括号的应用程序虚拟代码时,它似乎工作正常!我如何摆脱末端的那些 [ 和 ] 括号???

或者有没有办法接受json并调整java来读取它?

4

5 回答 5

1

不要使用 JSONobject,而是使用 JSONArray

   JSONArray array = new JSONArray(sourceString);

稍后循环遍历数组并执行业务逻辑。

http://www.json.org/javadoc/org/json/JSONArray.html

于 2013-10-10T21:18:39.597 回答
1
echo json_encode($status, JSON_FORCE_OBJECT);

演示:http ://codepad.viper-7.com/lrYKv6

或者

echo json_encode((Object) $status); 

演示;http://codepad.viper-7.com/RPtchU

于 2013-10-10T21:16:46.730 回答
0

解决方案 #1(Java)

像这样的辅助方法怎么样:

private int getProp(String name, JSONArray arr) throws Exception {
    for (int i = 0; i < arr.length(); ++i) {
        JSONObject obj = arr.getJSONObject(i);
        if (obj.has(name))
            return obj.getInt(name);
    }
    throw new Exception("Key not found");
}

然后你可以像这样使用它:

JSONArray jsonArray = new JSONArray(result); // note the *JSONArray* vs your *JSONObject*
n870 = getProp("A70_870", jsonArray);
n871 = getProp("A70_871", jsonArray);
...

注意我没有测试过这段代码,所以你可能需要做一些改变......

替代解决方案 (PHP)

自从我使用 PHP 以来已经有一段时间了,但是您可能可以保持 Java 代码完整,并将您的 PHP int the while-loop body 更改为:

$status[$rows['Aircraft']] = $rows['Status'];
于 2013-10-10T21:22:29.930 回答
0

你得到一个 JSONArray,不是对象,你可以创建一个持有数组的对象,或者解析数组。参考这个帖子

于 2013-10-10T21:19:02.193 回答
0

也许有这种 json 结构?

$status[$rows['Aircraft']]= $rows['Status'];
于 2013-10-10T21:19:20.853 回答