Docs Menu
Docs Home
/ /

Trabajar con datos JSON extendidos

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 que representa los valores de objetos, matrices, números, cadenas, valores 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 admite más tipos BSON y define un conjunto reservado de claves con el prefijo "$" para representar información de tipo de campo que corresponde directamente a cada tipo en BSON.

MongoDB Extended JSON ofrece dos formatos de cadena para representar datos BSON. Cada formato cumple con las RFC de JSON y cumple 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, consulte el recurso JSON y BSON y la entrada del manual JSON extendido de MongoDB Server.

El siguiente ejemplo muestra un documento que contiene un campo ObjectId, una fecha y un número largo representado en el formato JSON extendido. Seleccione 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
}

Puede escribir una cadena JSON extendida desde un objeto de documento BSON utilizando los métodos toRelaxedExtendedJSON() y toCanonicalExtendedJSON().

El siguiente ejemplo genera un documento BSON en formatos JSON relajado y extendido canónico:

$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" : { } }

Puedes convertir una cadena JSON extendida en un valor PHP llamando al método json_decode(), que convierte el JSON extendido en una matriz u objeto PHP. Pasa los siguientes argumentos a json_decode():

  • Cadena JSON extendida para leer.

  • Valor booleano que indica si se desea devolver un valor de matriz. Si se establece en false, el método devuelve un valor de objeto.

El siguiente ejemplo convierte un valor de cadena JSON extendida en una matriz 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
)
)
)

Para obtener más información sobre los métodos analizados en esta página, consulte la siguiente documentación de la API de extensión de PHP:

Volver

Time Series

En esta página