【问题标题】:How to return JSON data from php MongoCursor如何从 php MongoCursor 返回 JSON 数据
【发布时间】:2013-01-09 09:43:58
【问题描述】:

我正在使用 PHP 连接 MongoDB。我的代码如下。

// connect
$m = new MongoClient($con_string); // connect to a remote host at a given port
$db = $m->main;

$customers = $db->customer->find();

我想将 $customers 集合作为 json 文档返回到我的 HTML。我该怎么做?

【问题讨论】:

  • foreach($customers as $k => $row){ $newa[] = json_encode($row); } 您可能需要先将对象类型转换为纯字符串,尽管像 MongoId

标签: php mongodb


【解决方案1】:

您可以通过两种方式做到这一点:

echo json_encode(iterator_to_array($customers));

或者您可以手动滚动浏览它:

foreach($customers as $k => $row){
    echo json_encode($row);
}

每个 MongoDB 对象都应正确实现其 __toString() 方法以恢复值的表示。

【讨论】:

    【解决方案2】:

    这也可以。你也可以自定义你的json。

        $arr = array();
    
        foreach($customers as $c)
        {
            $temp = array("name" => $c["name"], "phone" => $c["phone"], 
                                                "address" => $c["address"]);
            array_push($arr, $temp);
        }
    
        echo json_encode($arr);
    

    【讨论】:

    • 此解决方案更好,因为它将逗号添加到 json.. +1
    • @ianaz 从集合中分隔多个值的逗号。
    • @Jack 不明白,它和游标的迭代器完全一样,它形成了一个所有行的数组,并且 json_encodes 它
    【解决方案3】:

    其他答案可行,但很高兴知道生成的 JSON 将具有以下形式(在此示例中,我为您的客户使用假设的“名称”字段):

    {
        "5587d2c3cd8348455b26feab": {
            "_id": {
                "$id": "5587d2c3cd8348455b26feab"
            },
            "name": "Robert"
        },
        "5587d2c3cd8348455b26feac": {
            "_id": {
                "$id": "5587d2c3cd8348455b26feac"
            },
            "name": "John"
        }
    }
    

    因此,如果您不希望 Object _id 成为每个结果对象的键,您可以将 false 参数添加到 iterator_to_array。 你的代码是:

    echo json_encode(iterator_to_array($customers, false), true);
    

    这会产生与

    相同的结果
    $result = Array();
    foreach ($customers as $entry) {
        array_push($result, $entry);
    }
    echo json_encode($result, true);
    

    这是一个 JSON 对象数组

    [
        {
            "_id": {
                "$id": "5587d2c3cd8348455b26feab"
            },
            "name": "Robert"
        },
        {
            "_id": {
                "$id": "5587d2c3cd8348455b26feac"
            },
            "name": "John"
        }
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-10
      • 2018-05-24
      • 2016-08-15
      相关资源
      最近更新 更多