如何在php中创建JSON数组?

时间:2014-05-30 14:46:14

标签: php json

我正在尝试创建一个简单的Android应用程序,它从数据库获取数据并在android屏幕上以列表格式显示它。我创建了一个查询数据库并返回json对象的php脚本。我将json对象转换为json数组并提取相关数据以供显示。但我收到此错误“JSONException:类型org.json.JSONObject无法转换为JSONArray”。

以下是我的php脚本 -

       // response Array

        $response = array("tag" => $tag, "success" => 0, "error" => 0);
        $username = $_POST['username'];
        $events = $db->viewAttendingEvent($username);

        if ($events) {
        $response["success"] = 1;
        $response["event"]["owner"] = $events["owner"];
        $response["event"]["friendsnames"] = $events["friendsnames"];
        $response["event"]["vote"] = $events["vote"];
        $response["event"]["accepted"] = $events["accepted"];
        $response["event"]["eventname"] = $events["eventname"];
        $response["event"]["eventnumber"] = $events["eventnumber"];
        $response["event"]["created_at"] = $events["created_at"];
        echo json_encode($response);

这是我收到的json:

{
    "tag": "view_invitations",
    "success": 1,
    "error": 0,
    "event": {
        "owner": "jkkkkoopp",
        "friendsnames": "don",
        "vote": "0",
        "accepted": "f",
        "eventname": "yyy",
        "eventnumber": "11",
        "created_at": "2014-05-29 22:27:31.843528"
    }
}

我试图从这个json对象中提取'event',它不是一个数组。 它应该是

{
    "event": [
        {
            "owner": "jkkkkoopp",
            "friendsnames": "don",
            "vote": "0",
            "accepted": "f",
            "eventname": "yyy",
            "eventnumber": "11",
            "created_at": "2014-05-2922: 27: 31.843528"
        }
    ]
}

有人可以帮助我如何使其成为有效的jsonArray吗?谢谢

2 个答案:

答案 0 :(得分:0)

如果您希望获得JavaScript'数组' (我的意思是 Object 只有整数键),那么你需要在PHP数组中只有整数键。

This article是一个非常好的资源,并解释了javascript中数组和对象之间的一些差异。这里的相关引用来自 What Arrays Are 部分(强调我的):

  

Javascript数组是一种用于存储多个对象的对象   单个变量中的值。 每个值都有数字索引,可能是   任何数据类型。

答案 1 :(得分:0)

不,不应该是你提出的应该是的。如果是这种情况你必须让你的PHP成为这样:

$response["event"][0]["owner"] = $events["owner"];
$response["event"][0]["friendsnames"] = $events["friendsnames"];
$response["event"][0]["vote"] = $events["vote"];
$response["event"][0]["accepted"] = $events["accepted"];
$response["event"][0]["eventname"] = $events["eventname"];
$response["event"][0]["eventnumber"] = $events["eventnumber"];
$response["event"][0]["created_at"] = $events["created_at"];

现在你的方式是event是一个关联数组,所以它将它转换为一个对象。您期望event =一个对象数组。因此,您需要更改PHP代码以使事件成为对象数组(如上所示),或者您需要修改期望event =对象。