Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

Trabalhe com dados JSON estendidos

Neste guia, você pode aprender como usar o formato Extended JSON no driver C.

JSON é um formato de dados que representa os valores de objetos, arrays, números, strings, booleans e nulos. Este formato suporta apenas um subconjunto de tipos de dados BSON, que é o formato que o MongoDB utiliza para armazenar dados. O formato Extended JSON oferece suporte a mais tipos de BSON, definindo um conjunto reservado de chaves prefixadas com "$" para representar informações de tipos de campo que correspondem diretamente a cada tipo em BSON.

Para obter mais informações sobre a diferença entre esses formatos, consulte o recurso JSON e BSON.

O MongoDB Extended JSON recurso diferentes formatos de string para representar dados BSON. Cada um dos formatos está em conformidade com o JSON RFC e atende a casos de uso específicos.

A tabela a seguir descreve cada formato:

Nome
Descrição

Extended

Também conhecido como o formato canônico, essa representação do JSON evita a perda de informações do tipo de BSON.
Esse formato prioriza a preservação do tipo na perda de legibilidade humana e interoperabilidade com formatos mais antigos.

Modo relaxado

Representação JSON que descreve documentos BSON com algum tipo de perda de informação.
Esse formato prioriza a legibilidade humana e a interoperabilidade na perda de determinados tipos de informações.

Shell

Obsoleto. Representação JSON que corresponde à sintaxe usada no MongoDB shell.
Esse formato prioriza a compatibilidade com o MongoDB shell, que frequentemente usa funções JavaScript para representar tipos.
A API legada usa este formato.

Strict

Obsoleto. Essa representação é o formato legado que está totalmente em conformidade com o JSON RFC que permite a qualquer analisador JSON ler as informações de tipos.
A API legado usa este formato.

Observação

O driver analisa o tipo de JSON estendido $uuid de uma string para dados binários com subtipo 4 (BSON_SUBTYPE_UUID). Para obter mais informações sobre análise do campo $uuid, consulte as regras especiais para analisar campos $uuid.

Para obter informações mais detalhadas sobre esses formatos, consulte os seguintes recursos:

Os exemplos abaixo mostram um documento contendo um campo de ObjectId, data e número longo representado em cada formato Extended JSON. Clique na aba correspondente ao formato do exemplo que deseja ver:

{ "_id": { "$oid": "573a1391f29313caabcd9637" }, "createdAt": { "$date": { "$numberLong": "1601499609" }}, "numViews": { "$numberLong": "36520312" }}

Você pode ler uma string de JSON estendida em um documento BSON chamando a função bson_new_from_json(). Esta função analisa a string JSON estendida e retorna uma estrutura bson_t contendo os dados.

O exemplo a seguir mostra como você pode ler uma string de exemplo de Extended JSON em um 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 obter mais informações, consulte a documentação da API bson_new_from_json() e bson_as_canonical_extended_json().

Você também pode analisar strings de Extended JSON usando o tipo bson_json_reader_t, que fornece uma interface de streaming para converter de JSON em BSON. Isso é particularmente útil ao processar vários documentos JSON ou quando você precisa de mais controle sobre o processo de análise.

O seguinte exemplo de código mostra como usar o bson_json_reader_t para converter uma string de Extended JSON em um 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);

Para obter mais informações, consulte a seguinte documentação da API:

Aviso

Valide entradas não confiáveis antes de converter JSON em BSON

Se você converter uma string JSON para BSON e usar o BSON resultante em uma query, atualizar ou comando, um invasor pode injetar operadores ou valores de campo inesperados que alteram o significado da operação. Esse risco é maior quando o JSON se origina de um usuário, uma solicitação de API ou outra fonte não confiável.

Para aprender mais sobre como validar a entrada antes da conversão, consulte Validar entrada não confiável antes de converter JSON em BSON.

Você pode gravar um documento BSON como uma string de JSON estendida chamando a função bson_as_json_with_opts(). Esta função converte um documento bson_t em uma string de Extended JSON com opções para especificar o formato de saída.

O exemplo a seguir mostra como criar um documento BSON e produzi-lo como JSON estendido em formato relaxado:

bson_t *doc;bson_oid_t oid;bson_json_opts_t *opts;char *json_str; // Create a BSON documentdoc = 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 modeopts = bson_json_opts_new (BSON_JSON_MODE_RELAXED, BSON_MAX_LEN_UNLIMITED); // Convert to Extended JSONjson_str = bson_as_json_with_opts (doc, NULL, opts);printf ("%s\n", json_str); // Cleanupbson_free (json_str);bson_json_opts_destroy (opts);bson_destroy (doc);

Para obter mais informações, consulte a documentação da API bson_as_json_with_opts().

Para aprender mais sobre as funções e tipos que você pode usar para trabalhar com dados de JSON estendido, consulte a seguinte documentação da API: