How to convert MongoDB BSONDocument to valid JSON in PHP?

13,772

Solution 1

I didn't see any answers here and I was having the same issue. I did some research and it appears that when you create a document of MongoDB\Model\BSONDocument there is a bsonSerialize() method. This method will return a stdClass Object which is really the PHP Array Class. According to documentation one can then convert from PHP to BSON and then to JSON.

This is crazy looking, but it works. Here is my example $accountResultDoc is of MongoDB\Model\BSONDocument type.

$json = MongoDB\BSON\toJSON(MongoDB\BSON\fromPHP($accountResultDoc))

Results

{
  "_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
}

Solution 2

The BSONDocument object has a jsonSerialize method. Use that:

Example

{"_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;

Will output this:

12345
myfile 

Solution 3

Another way would be:

json_encode( $bsonDoc->getArrayCopy() );

Share:
13,772

Related videos on Youtube

sawrubh
Author by

sawrubh

I work on the browser with a fiery tail.

Updated on June 04, 2022

Comments

  • sawrubh
    sawrubh almost 2 years

    I am using MongoDB with the PHP Library. I inserted a valid JSON document inside MongoDB using PHP. I am now retrieving the document using findOne and am getting a MongoDB\Model\BSONDocument object as a result. How do I get back my JSON document easily? Is there any inbuilt function or will I have to write logic to convert the BSONDocument to JSON?

    • Blakes Seven
      Blakes Seven about 8 years
      There seems to be a general confusion with this driver change. You appear to be using the mongodb pecl extension directly, when the intent is to use the higher level abstraction library here. That library will just yield plain objects, which will serialize to JSON simply. So the lower level driver you are using is intended to be used by other libraries providing abstraction. The "userland" library should always be something abstracting from that source.
  • james-see
    james-see about 5 years
    This saved my day! Thanks