如何在PHP中将MongoDB BSONDocument转换为有效的JSON?

saw*_*ubh 14 php json mongodb bson mongodb-php

我正在使用MongoDB和PHP库.我使用PHP在MongoDB中插入了一个有效的JSON文档.我现在正在使用findOne检索文档,结果得到一个MongoDB\Model\BSONDocument对象.如何轻松取回我的JSON文档?是否有任何内置函数或我是否必须编写逻辑来将BSONDocument转换为JSON?

pit*_*408 13

我在这里没有看到任何答案,我遇到了同样的问题.我做了一些研究,看来当你创建一个MongoDB\Model\BSONDocument文档时,有一个bsonSerialize()方法.此方法将返回一个stdClass对象,它实际上是PHP数组类.根据文档,然后可以从PHP转换为BSON然后转换为JSON.

这看起来很疯狂,但它确实有效.这是我的示例$ accountResultDoc是MongoDB\Model\BSONDocument类型.

$json = MongoDB\BSON\toJSON(MongoDB\BSON\fromPHP($accountResultDoc))
Run Code Online (Sandbox Code Playgroud)

结果

{
  "_id": {
    "$oid": "56e1d8c31d41c849fb292184"
  },
  "accountName": "Michael's Test Company",
  "accountType": "Partner",
  "subsidiary_id": {
    "$oid": "563c3ffbaca6f518d80303ce"
  },
  "salesforceId": "WERWERWEr2",
  "netsuiteExternalId": "56e1d8c31d41c849fb292184",
  "suspendBilling": false,
  "testAccount": false,
  "serviceOrder_ids": null,
  "invoice_ids": null
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*s.C 7

另一种方法是:

json_encode( $bsonDoc->getArrayCopy() );


And*_*dre 7

BSONDocument 对象有一个 jsonSerialize 方法。使用那个:

例子

{"_id" : 12345,
    "filename" : "myfile",
    "header" : {
        "version" : 2,
        "registry" : "test",
        "serial" : 20080215,
        "records" : 17806,
        "startDate" : 19850701,
        "endDate" : 20080214
    },
}

$connect = new MongoDB\Client('mongodb://yourconnection');
$db = $connect->YourDB;
$collection = $db->YourCollection;

$test = $collection->findOne(array("_id"=>12345));
$data = $test->jsonSerialize();

echo $data->_id;
echo $data->filename;
Run Code Online (Sandbox Code Playgroud)

将输出这个:

12345
myfile 
Run Code Online (Sandbox Code Playgroud)