Docs Menu
Docs Home
/ /

JSON extendido

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.

Para obtener más información sobre JSON, BSON y JSON extendido, consulte Entrada manual del servidorMongoDB JSON, BSON y recursos JSON extendidos.

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

La siguiente tabla describe cada formato JSON extendido:

Nombre
Descripción

Extendidoo 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 controlador Ruby analiza el $uuid tipo JSON extendido de una cadena a un BSON::Binary objeto de subtipo 4 binario. Para obtener más información sobre el $uuid análisis de campos, consulte la sección "Reglas especiales para el análisis de campos $uuid" en la especificación JSON extendida.

Los siguientes ejemplos muestran un documento que contiene un campo ObjectId, una fecha y un número largo, representados en cada formato JSON extendido. Haga clic en la pestaña correspondiente al formato del ejemplo que desea 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 cadena JSON extendida en una matriz de Ruby llamando al método BSON::ExtJSON.parse. Este método analiza una cadena JSON extendida y devuelve una matriz con los datos.

El siguiente ejemplo muestra cómo se puede leer una cadena JSON extendida en una matriz de hashes utilizando 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...>}

Puede escribir una cadena JSON extendida con el método as_extended_json. De forma predeterminada, este método devuelve la cadena JSON extendida en formato canónico, pero puede especificar formatos flexibles o heredados pasando un argumento mode.

Nota

Versión heredada

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

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

El método as_extended_json está disponible para varios tipos de bibliotecas principales y estándar, incluyendo Array y Hash. El siguiente ejemplo crea cadenas JSON extendidas en los formatos canónico, relajado y heredado, a partir de una matriz de hashes:

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, consulte los siguientes recursos:

Volver

BSON

En esta página