Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

JSON extendido

En esta guía, puede aprender a utilizar el formato de datos JSON extendido cuando interactúe con documentos de 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 la información del tipo de campo que corresponde directamente a cada tipo en BSON.

Para obtener más información sobre JSON, BSON y Extended JSON, consulte el Recurso JSON y BSON y entrada del manual del JSON ampliado de MongoDB Server.

MongoDB Extended JSON proporciona formatos de string para representar datos BSON. Cada formato cumple con el RFC de JSON y cumple con casos de uso específicos.

La siguiente tabla describe cada formato JSON extendido:

Nombre
Descripción

Extendido o Canónico

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. The Ruby driver uses this mode by default.

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. To specify this mode, pass :relaxed as the mode option.

Shell

A string format that matches the syntax used in the MongoDB shell.
This format prioritizes compatibility with the MongoDB shell, which often uses JavaScript functions to represent types. To specify this mode, pass :legacy as the mode option.

Nota

El driver Ruby analiza el tipo Extended JSON $uuid de una string a un objeto BSON::Binary de subtipo binario 4. Para obtener más información sobre el análisis de campos de $uuid, consulta la sección Normas especiales para el análisis de campos $uuid en la especificación extendida de JSON.

Los siguientes ejemplos muestran un documento que contiene un campo ObjectId, una fecha y un número largo representado en cada formato Extendido de JSON. Haz clic en la pestaña que corresponda al formato del ejemplo que desees ver:

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

Puedes leer una string JSON extendida en un arreglo Ruby llamando al método BSON::ExtJSON.parse. Este método analiza una string JSON extendida y devuelve un arreglo que contiene los datos.

El siguiente ejemplo muestra cómo se puede leer una string de Extended JSON en un arreglo de hashes usando el método parse:

require 'bson'
ex_json = '''[
{"foo": [1, 2]},
{"bar": {"hello": "world"}},
{"code": {
"$scope": {},
"$code": "function x() { return 1; }"
}},
{"bin": {
"$type": "80",
"$binary": "AQIDBA=="
}}
]'''
doc = BSON::ExtJSON.parse(ex_json)
puts doc.class
puts doc
{"foo" => [1, 2]}
{"bar" => {"hello" => "world"}}
{"code" => #<BSON::CodeWithScope:0x0000000123f398e0 @javascript="function x() { return 1; }", @scope={}>}
{"bin" => <BSON::Binary:0x7144 type=user data=0x01020304...>}

Puedes guardar una cadena Extended JSON utilizando el método as_extended_json. Por defecto, este método devuelve la string de JSON extendido en formato canónico, pero puedes especificar formatos relajados o heredados pasando un argumento mode.

Nota

Versión heredada

La opción de formato heredado indica al driver de Ruby que serialice los BSON types con el formato MongoDB Extended JSON v1, que es anterior a los formatos actuales relajados y canónicos.

Para obtener más información, consulta la página MongoDB Extended JSON v1 en el Manual del servidor.

El método as_extended_json está disponible para varios tipos del núcleo y de la librería estándar, incluidos Array y Hash. El siguiente ejemplo crea cadenas Extended JSON en los formatos canónico, relajado y heredado, a partir de un arreglo de hash:

require 'bson'
hash_array = [
{ "foo" => [1, 2] },
{ "bin" => BSON::Binary.new("\x01\x02\x03\x04", :user) },
{ "number" => BSON::Int64.new(42) }
]
json_string_canonical = hash_array.as_extended_json
json_string_relaxed = hash_array.as_extended_json(mode: :relaxed)
json_string_legacy = hash_array.as_extended_json(mode: :legacy)
puts "canonical:\t #{json_string_canonical}"
puts "relaxed:\t #{json_string_relaxed}"
puts "legacy:\t\t #{json_string_legacy}"
canonical: [{"foo":[{"$numberInt":"1"},{"$numberInt":"2"}]},{"bin":{"$binary":{"base64":"AQIDBA==","subType":"80"}}},{"number":{"$numberLong":"42"}}]
relaxed: [{"foo":[1,2]},{"bin":{"$binary":{"base64":"AQIDBA==","subType":"80"}}},{"number":42}]
legacy: [{"foo":[1,2]},{"bin":{"$binary":"AQIDBA==","$type":"80"}},{"number":42}]

Para obtener más información, consulta los siguientes recursos:

Volver

BSON

En esta página