【问题标题】:How to create a JSON array in php?如何在 php 中创建 JSON 数组?
【发布时间】:2014-05-30 14:46:14
【问题描述】:

我正在尝试创建一个简单的 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": [
        {
            "owner": "jkkkkoopp",
            "friendsnames": "don",
            "vote": "0",
            "accepted": "f",
            "eventname": "yyy",
            "eventnumber": "11",
            "created_at": "2014-05-2922: 27: 31.843528"
        }
    ]
}

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

【问题讨论】:

  • 为什么你认为它不是一个有效的 json 数组?它使 $response['event'] 成为一个对象,因为您有与值关联的键。
  • Answered Here 看看选择的答案应该可以解决您的问题。
  • This is the json which I receive back 是什么意思?是在客户端吗?你应该先告诉我们json_encode($response);在服务器上的输出是什么。
  • 这是 json_encode($response) 的输出: {"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数组是:{"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"}]}

标签: php json


【解决方案1】:

如果您正在寻找一个 JavaScript 'Array'(我的意思是一个只有整数键的 Object),那么您的 PHP 数组中只需要有整数键即可。

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

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

【讨论】:

    【解决方案2】:

    不,它不应该是您建议的那样。如果是这种情况,你必须让你的 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 成为一个对象数组(如上所示),或者您需要修改您的期望以使 event = 一个对象。

    【讨论】:

    • 我将我的 php 脚本更改为您编写的方式,但我的浏览器上仍然收到此 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 数组
    • 你确定它不是缓存还是什么?尝试从浏览器中调用 api 调用,看看是否得到正确的响应。
    • 仍然得到相同的响应
    • 你有if ($events) { 如果$events 为空或null 会发生什么?您是否还设置了指定它是返回 json 的标头?
    • 如果事件为空,它会简单地打印“无效”。但我没有设置任何标题。我必须设置哪个标题
    猜你喜欢
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    相关资源
    最近更新 更多