web-dev-qa-db-ja.com

MongoDB BSONDocumentをPHPで有効なJSONに変換する方法は?

PHPライブラリでMongoDBを使用しています。PHPを使用してMongoDB内に有効なJSONドキュメントを挿入しました。 findOne を使用してドキュメントを取得し、MongoDB \を取得しています。結果としてModel\BSONDocumentオブジェクト。JSONドキュメントを簡単に取り戻すにはどうすればよいですか?組み込み関数はありますか、それともBSONDocumentをJSONに変換するロジックを作成する必要がありますか?

14
sawrubh

ここには回答がなく、同じ問題が発生していました。調査を行ったところ、MongoDB\Model\BSONDocumentのドキュメントを作成すると、bsonSerialize()メソッドがあるようです。このメソッドは、実際にはPHP配列クラスであるstdClassオブジェクトを返します。ドキュメントによると、PHPからBSONに、次にJSONに変換できます。

これは見た目がおかしいですが、機能します。これが私の例です$ accountResultDocはMongoDB\Model\BSONDocumentタイプです。

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

結果

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

別の方法は次のとおりです。

json_encode( $bsonDoc->getArrayCopy() );

5
Marius.C

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;

これを出力します:

12345
myfile 
5
Andre

私は同じ問題を抱えていました、そしてこれは私が内部の値にアクセスする方法です。これはfindで機能します。

foreach ($result as $entry) {
   echo $entry['_id'], $entry['val1'], ['val2'];
}

これが誰かを助けることを願っています。