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

En esta guía, puedes aprender a usar el formato Extended JSON en el driver de C.

JSON es un formato de datos que representa los valores de objetos, arreglos, números, cadenas, booleanos y nulos. Este formato solo admite un subconjunto de tipos de datos BSON, que es el formato que utiliza MongoDB para almacenar datos. El formato Extended JSON admite más BSON types, 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.

Para obtener más información sobre la diferencia entre estos formatos, consulta el Recurso JSON y BSON.

MongoDB Extended JSON ofrece diferentes formatos de cadena para representar datos BSON. Cada uno de estos formatos cumple con la RFC de JSON y satisface casos de uso específicos.

La siguiente tabla describe 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.

Shell

Deprecated. JSON representation 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.
The legacy API uses this format.

Estricto

Deprecated. This representation is the legacy format that fully conforms to the JSON RFC, which allows any JSON parser to read the type information.
The legacy API uses this format.

Nota

El driver analiza el tipo Extended JSON de $uuid de un string a datos binarios con el subtipo 4 (BSON_SUBTYPE_UUID). Para obtener más información sobre el análisis de campo $uuid, consulte las reglas especiales para analizar los campos $uuid.

Para obtener información más detallada sobre estos formatos, consulte los siguientes recursos:

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")
}
{
"_id": { "$oid": "573a1391f29313caabcd9637" },
"createdAt": { "$date": 1601499609 },
"numViews": { "$numberLong": "36520312" }
}

Puede leer una cadena JSON extendida en un documento BSON llamando a la función bson_new_from_json(). Esta función analiza la cadena JSON extendida y devuelve una estructura bson_t que contiene los datos.

El siguiente ejemplo muestra cómo puede leer un ejemplo de string JSON extendida en un documento bson_t:

/* Read Extended JSON string to BSON */
const char *ejson_str = "{ \"_id\": { \"$oid\": \"507f1f77bcf86cd799439011\"},"
"\"myNumber\": {\"$numberLong\": \"4794261\" }}";
bson_error_t error;
bson_t *doc = bson_new_from_json ((const uint8_t *)ejson_str, -1, &error);

Para obtener más información, consulte la documentación de la API bson_new_from_json() y bson_as_canonical_extended_json().

También puede analizar cadenas JSON extendidas mediante el tipo bson_json_reader_t, que proporciona una interfaz de transmisión para convertir JSON a BSON. Esto resulta especialmente útil al procesar varios documentos JSON o cuando necesita mayor control sobre el proceso de análisis.

El siguiente ejemplo de código muestra cómo puedes usar bson_json_reader_t para convertir una string de JSON extendido en un documento BSON:

const char *ejson_str = "{ \"_id\": { \"$oid\": \"507f1f77bcf86cd799439011\"},"
"\"myNumber\": {\"$numberLong\": \"4794261\" }}";
bson_json_reader_t *reader;
bson_error_t error;
bson_t doc = BSON_INITIALIZER;
int ret;
reader = bson_json_data_reader_new (false, 0);
bson_json_data_reader_ingest (reader, (const uint8_t *)ejson_str, strlen (ejson_str));
ret = bson_json_reader_read (reader, &doc, &error);
if (ret > 0) {
bson_iter_t iter;
if (bson_iter_init (&iter, &doc)) {
while (bson_iter_next (&iter)) {
const char *key = bson_iter_key (&iter);
if (strcmp (key, "_id") == 0 && BSON_ITER_HOLDS_OID (&iter)) {
const bson_oid_t *oid = bson_iter_oid (&iter);
char oid_str[25];
bson_oid_to_string (oid, oid_str);
printf ("%s is type: ObjectId\n", oid_str);
}
if (strcmp (key, "myNumber") == 0 && BSON_ITER_HOLDS_INT64 (&iter)) {
int64_t number = bson_iter_int64 (&iter);
printf ("%ld is type: int64_t\n", (long)number);
}
}
}
} else if (ret < 0) {
printf ("Error: %s\n", error.message);
}
bson_json_reader_destroy (reader);
bson_destroy (&doc);
507f1f77bcf86cd799439011 is type: ObjectId
4794261 is type: int64_t

Para obtener más información, consulte la siguiente documentación de la API:

Puedes escribir un documento BSON como una string JSON Extendida llamando a la función bson_as_json_with_opts(). Esta función convierte un documento bson_t en una string JSON Extendida con opciones para especificar el formato de salida.

El siguiente ejemplo muestra cómo crear un documento BSON y exportarlo como JSON ampliado en formato relajado:

bson_t *doc;
bson_oid_t oid;
bson_json_opts_t *opts;
char *json_str;
// Create a BSON document
doc = bson_new ();
bson_oid_init_from_string (&oid, "507f1f77bcf86cd799439012");
bson_append_oid (doc, "_id", -1, &oid);
bson_append_int32 (doc, "myNumber", -1, 11223344);
// Configure JSON output options for Relaxed mode
opts = bson_json_opts_new (BSON_JSON_MODE_RELAXED, BSON_MAX_LEN_UNLIMITED);
// Convert to Extended JSON
json_str = bson_as_json_with_opts (doc, NULL, opts);
printf ("%s\n", json_str);
// Cleanup
bson_free (json_str);
bson_json_opts_destroy (opts);
bson_destroy (doc);
{ "_id" : { "$oid" : "507f1f77bcf86cd799439012" }, "myNumber" : 11223344 }

Para obtener más información, vea la documentación de la API bson_as_json_with_opts().

Para obtener más información sobre las funciones y tipos que puedes utilizar para trabajar con datos JSON extendidos, consulta la documentación de la API:

Volver

BSON

En esta página