Visão geral
Neste guia, você verá como usar o formato de dados JSON estendido ao interagir com documentos do MongoDB.
JSON é um formato de dados legível por humanos 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 aceita 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 saber mais sobre JSON, BSON e Extended JSON, consulte o recurso JSON e BSON e a entrada de manual do Extended JSON MongoDB Server.
Formatos Extended JSON
O MongoDB Extended JSON fornece formatos de string para representar dados BSON. Cada formato está em conformidade com o JSON RFC e atende a casos de uso específicos.
A tabela abaixo descreve cada formato de Extended JSON:
Nome | Descriçã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. To specify this mode, pass bsoncxx::ExtendedJsonMode::k_canonical as a mode argument to the to_json() method. |
Descontraído | 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 bsoncxx::ExtendedJsonMode::k_relaxed as a mode argument to the to_json() method. |
Legacy | A string format that describes BSON documents with some type information loss. This format matches Relaxed Extended JSON with some exceptions. The C++ driver uses this mode by default. |
Observação
O driver C++ analisa o $uuid tipo de JSON estendido de uma string para um b_binary objeto de subtipo 4 binário. Para obter mais informações sobre a $uuid análise do campo, consulte a seção regras especiais para analisar campos $uuid na especificação de JSON estendida.
Exemplos de JSON estendido
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" } }
{ "_id": { "$oid": "573a1391f29313caabcd9637" }, "createdAt": { "$date": "2020-09-30T18:22:51.648Z" }, "numViews": 36520312 }
{ "_id": { "$oid": "573a1391f29313caabcd9637" }, "createdAt": { "$date": "1601499771648" }, "numViews": 36520312 }
Ler Extended JSON
Você pode ler uma string de Extended JSON em um documento C++ BSON chamando o método bsoncxx::from_json(). Este método analisa uma string de JSON estendida e retorna um bsoncxx::document::value contendo os dados.
O exemplo a seguir mostra como ler uma string de Extended JSON em um documento BSON usando o método from_json():
bsoncxx::document::value doc = bsoncxx::from_json(R"( { "_id": {"$oid": "507f1f77bcf86cd799439011"}, "myNumber": {"$numberLong": "4794261"} } )");
Escrever JSON estendido
Você pode gravar uma string de JSON estendida usando o método bsoncxx::to_json(). Por padrão, este método retorna a string de JSON estendida no formato legado , mas você pode especificar formatos canônicos ou relaxados passando um argumento mode.
Observação
Versão legada
A opção de formato legado informa ao driver C++ para serializar os tipos BSON com o formato Libbson Legacy Extended JSON. O condutor utiliza este modo como padrão .
Para obter mais informações, consulte a página JSON estendido legado na documentação da API do driver C.
O método bsoncxx::to_json() está disponível para vários tipos de bibliotecas principais e padrão, incluindo array e document. O exemplo a seguir converte um valor document em uma string de JSON estendida no formato canônico:
bsoncxx::builder::basic::document doc_builder; doc_builder.append(kvp("myNumber", 11223344)); doc_builder.append(kvp("myString", "String value")); bsoncxx::document::value doc = doc_builder.extract(); std::string json_str = bsoncxx::to_json(doc, bsoncxx::ExtendedJsonMode::k_canonical); std::cout << json_str << std::endl;
{"myNumber":{"$numberInt":"11223344"},"myString":"String value"}
Informações adicionais
Documentação da API
Para saber mais sobre os tipos e métodos mencionados neste guia, consulte a seguinte documentação da API:
Páginas manuais do servidor
Para saber mais sobre Extended JSON, consulte MongoDB Extended JSON (v)2 no manual do MongoDB Server .