Overview
En esta guía, puede aprender a utilizar el formato de datos JSON extendido al interactuar con documentos MongoDB.
JSON es un formato de datos legible para humanos que representa los valores de objetos, arreglos, números, cadenas, booleanos y valores nulos. Este formato solo admite un subconjunto de tipos de datos BSON, que es el formato que MongoDB utiliza para almacenar datos. El formato JSON extendido es compatible con más tipos BSON, definiendo un conjunto reservado de claves con el prefijo "$" para representar información de tipo de campo que corresponde directamente a cada tipo en BSON.
Formatos JSON extendidos
MongoDB Extended JSON presenta dos formatos de string para representar datos BSON. Cada formato cumple con el estándar JSON RFC y cumple con casos de uso específicos.
La siguiente tabla describe cada formato JSON extendido:
Nombre | Descripción |
|---|---|
Canónico o Extendido | A string format that avoids loss of BSON type information during data conversions. This format prioritizes type preservation at the loss of human-readability and
interoperability with older formats. |
Modo Relajado | A string format that describes BSON documents with some type information loss. This format prioritizes human-readability and interoperability at the loss of
certain type information. |
Para obtener más información sobre JSON, BSON y JSON extendido, consulta el recurso JSON y BSON y la entrada del manual JSON extendido de MongoDB Server.
Ejemplos de JSON extendidos
El siguiente ejemplo muestra un documento que contiene un ObjectId, una fecha y un campo de número largo representados en el formato JSON extendido. Elija el Canonical
o la pestaña Relaxed Mode para ver el documento de muestra en cada formato JSON extendido:
{ "_id": { "$oid": "573a1391f29313caabcd9637" }, "createdAt": { "$date": { "$numberLong": "1601499609" }}, "numViews": { "$numberLong": "36520312" } }
{ "_id": { "$oid": "573a1391f29313caabcd9637" }, "createdAt": { "$date": "2020-09-30T18:22:51.648Z" }, "numViews": 36520312 }
Guardar Extended JSON
Puedes escribir una string JSON extendida a partir de un documento BSON utilizando los métodos toRelaxedExtendedJSON() y toCanonicalExtendedJSON().
El siguiente ejemplo genera un documento BSON en ambos formatos JSON Extendido Relajado y Canonical:
$doc = [ 'foo' => [1, 2], 'bar' => ['hello' => 'world'], 'code' => new MongoDB\BSON\Javascript('function x() { return 1; }', []), 'date' => new DateTime('2024-07-20 10:30:00'), ]; echo 'Relaxed format: ' , MongoDB\BSON\Document::fromPHP($doc)->toRelaxedExtendedJSON(), PHP_EOL; echo 'Canonical format: ' , MongoDB\BSON\Document::fromPHP($doc)->toCanonicalExtendedJSON(), PHP_EOL;
Relaxed format: { "foo" : [ 1, 2 ], "bar" : { "hello" : "world" }, "code" : { "$code" : "function x() { return 1; }", "$scope" : { } }, "date" : { } } Canonical format: { "foo" : [ { "$numberInt" : "1" }, { "$numberInt" : "2" } ], "bar" : { "hello" : "world" }, "code" : { "$code" : "function x() { return 1; }", "$scope" : { } }, "date" : { } }
Leer JSON extendido
Puedes leer una cadena Extended JSON en un valor PHP llamando al método json_decode(), que convierte Extended JSON en un arreglo o objeto PHP. Pase los siguientes argumentos a json_decode():
JSON string extendida para leer.
Valor booleano que indica si desea devolver un valor de arreglo. Si se establece en
false, el método devuelve un valor de objeto.
El siguiente ejemplo convierte un valor de string JSON extendido a un arreglo PHP:
$ejsonStr = '{ "foo": [ { "$numberInt": "1" }, { "$numberInt": "2" } ], "bar": { "hello": "world" }, "code": { "$code": "function x() { return 1; }", "$scope": {} }, "bin": { "$binary": { "base64": "AQIDBA==", "subType": "00" } } }'; $decodedJson = json_decode($ejsonStr, true); print_r($decodedJson);
Array ( [foo] => Array ( [0] => Array ( [$numberInt] => 1 ) [1] => Array ( [$numberInt] => 2 ) ) [bar] => Array ( [hello] => world ) [code] => Array ( [$code] => function x() { return 1; } [$scope] => Array ( ) ) [bin] => Array ( [$binary] => Array ( [base64] => AQIDBA== [subType] => 00 ) ) )
Documentación de la API
Para obtener más información sobre los métodos que se tratan en esta página, consulte la siguiente documentación sobre la API de extensiones de PHP: