Visão geral
JSON é um formato de dados que representa os valores de objetos, arrays, números, strings, booleans e nulos. O formato Extended JSON define um conjunto reservado de chaves prefixadas com "$" para representar informações de tipos de campos que correspondem diretamente a cada tipo em BSON, o formato usado pelo MongoDB para armazenar dados.
Formatos Extended JSON
O MongoDB Extended JSON apresenta 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. O formato estendido, também conhecido como formato canônico, apresenta representações específicas para cada tipo BSON para conversão bidirecional sem perda de informações. O formato Modo Relaxado é mais conciso e semelhante ao JSON comum, mas não representa todas as informações de tipo, como a largura de bits específica dos campos numéricos.
Consulte a tabela a seguir para ver uma descrição de 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. |
Modo relaxado | Representação JSON que descreve documentos BSON com algum tipo de perda de informação. |
Para saber mais sobre JSON, BSON e Extended JSON, consulte nosso artigo sobre JSON, BSON e Extended JSON no manual do MongoDB Server .
Exemplos de JSON estendido
Os exemplos abaixo mostram um documento contendo um campo de ObjectId, data e número longo representado no 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 }
Escrever JSON estendido
Você pode gravar uma string de JSON estendida a partir de um objeto de documento BSON usando o método EJSON.stringify().
O exemplo a seguir gera uma string de Extended JSON no formato Relaxed:
import { Code, BSON } from 'mongodb'; const EJSON = BSON.EJSON; const doc = { foo: [1, 2], bar: { hello: "world" }, code: new Code("function x() { return 1; }", {}), date: new Date(2024, 6, 20, 10, 30, 0), }; const ejsonStr = EJSON.stringify(doc); console.log(ejsonStr);
Por padrão, o método stringify() retorna a string de JSON estendida no formato relaxado. Para especificar o formato canônico, configure a opção relaxed para false.
O exemplo a seguir mostra como gerar JSON estendido no formato canônico:
import { Code, BSON } from 'mongodb'; const EJSON = BSON.EJSON; const doc = { foo: [1, 2], bar: { hello: "world" }, code: new Code("function x() { return 1; }", {}), date: new Date(2024, 6, 20, 10, 30, 0), }; const ejsonStr = EJSON.stringify(doc, { relaxed: false }); print(ejsonStr)
Ler Extended JSON
Você pode ler uma string de JSON estendida no valor ou objeto JavaScript descrito pela string usando o método EJSON.parse().
O exemplo abaixo mostra como ler uma string de JSON estendida em um valor ou objeto JavaScript usando o método parse():
import { BSON } from 'mongodb'; const EJSON = BSON.EJSON; const ejsonStr = `{ "foo": [ { "$numberInt": "1" }, { "$numberInt": "2" } ], "bar": { "hello": "world" }, "code": { "$code": "function x() { return 1; }", "$scope": {} }, "bin": { "$binary": { "base64": "AQIDBA==", "subType": "00" } } }`; const doc = EJSON.parse(ejsonStr); console.log(doc);
Observação
O driver analisa o tipo de JSON estendido $uuid de uma string para um objeto BsonBinary de subtipo binário 4. Para obter mais informações sobre a análise do campo $uuid, consulte a seção Regras especiais para analisar campos $uuid na especificação de JSON estendido.
Aviso
Validar entrada não confiável antes de converter JSON em BSON
Se você converter uma string JSON em BSON e utilizar o BSON resultante em uma query, atualização ou comando, um invasor poderá 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, de uma solicitação de API ou de outra fonte não confiável.
Para saber mais sobre como validar a entrada antes da conversão, consulte Validar entrada não confiável antes de converter JSON em BSON.
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a documentação da API EJSON.