Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Trabajar con datos JSON ampliados

JSON es un formato de datos que representa los valores de objetos, arreglos, números, cadenas, booleanos y nulos. El formato JSON extendido define un conjunto reservado de claves con el prefijo “$" para representar información del tipo de campo que corresponde directamente a cada tipo en BSON, el formato que MongoDB utiliza para almacenar datos.

MongoDB Extended JSON presenta diferentes formatos de string para representar los datos BSON. Cada uno de los diferentes formatos se ajusta al RFC de JSON y satisface casos de uso específicos. El formato Ampliado, también conocido como formato Canónico, cuenta con representaciones específicas para cada tipo BSON que permiten una conversión bidireccional sin pérdida de información. El formato de Modo relajado es más conciso y se acerca más al JSON ordinario, pero no representa toda la información del tipo, como el ancho de bit específico de los campos numéricos.

Consulte la siguiente tabla para ver una descripción de cada formato:

Nombre
Descripción

Extendido

Also known as the Canonical format, this JSON representation avoids loss of BSON type information.
This format prioritizes type preservation at the loss of human-readability and interoperability with older formats.

Modo Relajado

JSON representation that describes BSON documents with some type information loss.
This format prioritizes human-readability and interoperability at the loss of certain type information.

Para aprender más sobre JSON, BSON y JSON Extendido, consulta nuestro artículo sobre JSON y BSON y JSON extendido en el manual de MongoDB Server.

Los siguientes ejemplos muestran un documento que contiene un ObjectId, una fecha y un campo de número largo representados en el formato JSON extendido. Haz clic en la pestaña que corresponde al formato del ejemplo que deseas ver:

{
"_id": { "$oid": "573a1391f29313caabcd9637" },
"createdAt": { "$date": { "$numberLong": "1601499609" }},
"numViews": { "$numberLong": "36520312" }
}
{
"_id": { "$oid": "573a1391f29313caabcd9637" },
"createdAt": { "$date": "2020-09-30T18:22:51.648Z" },
"numViews": 36520312
}

Puedes escribir una string JSON extendida desde un objeto de documento BSON usando el método EJSON.stringify().

El siguiente ejemplo genera una string JSON extendida en el formato relajado:

import { Code, BSON } from 'mongodb';
const EJSON = BSON.EJSON;
const doc = {
foo: [1, 2],
bar: { hello: "world" },
code: new Code("function x() { return 1; }", {}),
date: new Date(2024, 6, 20, 10, 30, 0),
};
const ejsonStr = EJSON.stringify(doc);
console.log(ejsonStr);
{"foo":[1,2],"bar":{"hello":"world"},"code":{"$code":"function x() { return 1; }","$scope":{}},"date":{"$date":"2024-07-20T14:30:00Z"}}

Por defecto, el método stringify() devuelve la string Extended JSON en formato relajado. Para especificar el formato canónico, configure la opción relaxed en false.

El siguiente ejemplo muestra cómo producir JSON extendido en el formato estándar:

import { Code, BSON } from 'mongodb';
const EJSON = BSON.EJSON;
const doc = {
foo: [1, 2],
bar: { hello: "world" },
code: new Code("function x() { return 1; }", {}),
date: new Date(2024, 6, 20, 10, 30, 0),
};
const ejsonStr = EJSON.stringify(doc, { relaxed: false });
print(ejsonStr)
{"foo":[{"$numberInt":"1"},{"$numberInt":"2"}],"bar":{"hello":"world"},"code":{"$code":"function x() { return 1; }","$scope":{}},"date":{"$date":{"$numberLong":"1721485800000"}}}

Puede leer una string JSON extendida en el valor de JavaScript u objeto descrito por la string utilizando el método EJSON.parse().

El siguiente ejemplo muestra cómo puedes leer una cadena JSON extendida en un valor u objeto de JavaScript utilizando el método parse():

import { BSON } from 'mongodb';
const EJSON = BSON.EJSON;
const ejsonStr = `{
"foo": [
{ "$numberInt": "1" },
{ "$numberInt": "2" }
],
"bar": { "hello": "world" },
"code": {
"$code": "function x() { return 1; }",
"$scope": {}
},
"bin": { "$binary": { "base64": "AQIDBA==", "subType": "00" } }
}`;
const doc = EJSON.parse(ejsonStr);
console.log(doc);
{
foo: [ 1, 2 ],
bar: { hello: 'world' },
code: new Code('function x() { return 1; }', {}),
bin: Binary.createFromBase64('AQIDBA==', 0)
}

Nota

El controlador analiza el tipo $uuid Extended JSON de un string a un objeto BsonBinary de subtipo binario 4. Para más información sobre el análisis del campo $uuid, consultar la sección Reglas especiales para el análisis de campos $uuid en la especificación extendida de JSON.

Para aprender más sobre cualquiera de los métodos o tipos discutidos en esta guía, consulta la EJSON Documentación de la API.

Volver

Validación UTF-8

En esta página