JavaScript Object Notation

JSON
Javascript Object Notation Imagem na Infobox. Logotipo do formato JSON Características
Extensão .json
Tipo MIME application/json
PUID fmt / 817
Desenvolvido por Douglas Crockford
Versão inicial 2002
Tipo de formato Texto
Baseado em Javascript
Padrão RFC-8259 e ECMA-404
Especificação Formato aberto
Local na rede Internet json.org/json-fr.html

JavaScript Object Notation (JSON) é umformato de dadostextual derivado da notação deobjetodalinguagemJavaScript. Ele permite que você represente informações estruturadas como oXML permite,por exemplo. criado porDouglas Crockfordentre 2002 e 2005, o primeiro padrão JSON é o ECMA-404, que foi publicado em outubro de 2003, e atualmente é descrito pelos dois padrões concorrentes:RFC 8259 daIETFe ECMA 404 daECMA.

A versão mais recente das especificações de formato é dezembro de 2017.

Bibliotecas para o formato JSON existem na maioria das linguagens de programação.

Características

Um documento JSON consiste em dois tipos de elementos estruturais:

Esses mesmos elementos representam três tipos de dados:

Exemplo

Exemplo de dados no formato JSON:

{ "menu": { "id": "file", "value": "File", "popup": { "menuitem": [ { "value": "New", "onclick": "CreateNewDoc()" }, { "value": "Open", "onclick": "OpenDoc()" }, { "value": "Close", "onclick": "CloseDoc()" } ] } } }

Equivalente ao formato XML  :

<menu id="file" value="File"> <popup> <menuitem value="New" onclick="CreateNewDoc()"/> <menuitem value="Open" onclick="OpenDoc()"/> <menuitem value="Close" onclick="CloseDoc()"/> </popup> </menu>

Equivalente ao formato YAML  :

menu: id: file value: File popup: menuitem: - value: New onclick: CreateNewDoc() - value: Open onclick: OpenDoc() - value: Close onclick: CloseDoc()

Digitando

Os seis tipos básicos de formato JSON são:

  1.  Sequência de caracteres : uma sequência de 0 ou mais caracteres Unicode . Como as chaves, elas devem ser colocadas entre aspas (não intercambiáveis ​​com apóstrofos).
  2. Número: um número decimal com sinal que pode conter uma fração que pode ser dividida ou elevada à potência (notação E). O Json não admite números inexistentes ( NaN ) e não faz distinção entre um inteiro e um número flutuante.
  3. Boolean  : verdadeiro ou falso são usados ​​para definir o estado do booleano.
  4. Digite nulo  : um valor vazio, usando a palavra-chave null.
  5. Tabela .
  6. Objeto.

Comentários

Por definição, JSON é um formato de intercâmbio de dados . Portanto, a RFC não admite comentários (que são, por natureza, metadados ( metadados) ). Os analisadores JSON estrito geram uma exceção quando encontram um caractere inesperado pela especificação (a partir /de //ou /*apenas iniciando comentários de JavaScript).

Existem iniciativas de formato que sobrecarregam JSON para permitir a adição de comentários (como Hjson for Human JSON em inglês) e software que torna possível renderizar, a partir desses formatos derivados, JSON em formato puro e estrito. No entanto, como esses arquivos exigem uma etapa adicional antes de serem lidos por um interpretador JSON padrão, eles perdem um pouco a facilidade de interoperabilidade .

Sempre podemos adicionar uma propriedade do objeto representado pelo JSON, chamá-la de "_comment" (um uso expansível) e colocar um texto (o comentário) no campo de valor:

{ "_comment": "Imported from Wikidata 2015-05-27 10:13.", "QID": "Q5502001", "label": "Adèle", "description": "late 18th century, early 19th century French brig" }

Durante o desenvolvimento do formato, David Crockford notado que alguns dos primeiros usuários do JSON adicionados comentários a fim de dar directivas para o analisador, como instruções #ifdefou #defineo pré-processador C . Ele os vê como um perigo para a interoperabilidade, uma prioridade do formato, e decide retirá-los. Em 2012, ele explicou sua escolha e reconheceu estar ciente da tristeza dos usuários por não poderem comentar sobre esses arquivos.

Vantagens e desvantagens

Benefícios

Esses tipos de dados são suficientemente genéricos e abstratos para, por um lado, poderem ser representados em qualquer linguagem de programação e, por outro lado, ser capazes de representar quaisquer dados concretos.

A principal vantagem do JSON é que ele é fácil de implementar por um desenvolvedor e ainda é abrangente.

Benefícios:

  • não muito prolixo, o que o torna legível por um humano e também por uma máquina;
  • fácil de aprender, pois sua sintaxe é reduzida e não extensível (embora tenha algumas limitações);
  • seus tipos de dados são conhecidos e fáceis de descrever.

Desvantagens

JSON pode representar apenas alguns tipos gerais e não é possível adicionar mais. Para datas ou cores, por exemplo, devemos encontrar representações na forma de cadeias de caracteres. Essa é a principal diferença de uma linguagem como o XML , onde os dados são digitados e extensíveis, ao custo de uma complexidade maior.

Essa digitação fraca enfraquece a segurança e a confiabilidade do idioma; por exemplo, não há limite fixo para valores inteiros, depende do interpretador.

De um ponto de vista mais prático, não pode haver comentários, o que é irritante ao usar arquivos JSON em uma configuração. Algumas bibliotecas aceitam comentários em formato JavaScript.

[não neutro]

Usos

Embora use a notação JavaScript , JSON é independente da linguagem de programação (várias dezenas de linguagens de programação integraram JSON). JSON é usado para comunicar aplicativos em um ambiente heterogêneo. É usado principalmente como linguagem de transporte de dados por AJAX e serviços da Web . Outras soluções são possíveis, como XML . O tipo MIME application / json é usado para transmiti-lo pelo protocolo HTTP .

Com relação ao JavaScript, um documento JSON representa um objeto, daí seu nome. Portanto, é potencialmente mais fácil de interpretar do que XML, que exigirá o uso de técnicas frequentemente mais pesadas do que o acesso direto, como a travessia hierárquica da árvore DOM representada por todo o documento.

Também pode ser usado para:

Avaliação

Em JavaScript , é fácil avaliar uma expressão JSON para transformá-la em um objeto nativo:

var donnees = eval('('+donnees_json+')');

No entanto, esse método apresenta riscos porque a sequência de caracteres donnees_jsonpode conter qualquer código JavaScript . Existe um método mais seguro que consiste em analisar a sintaxe da string de caracteres donnees_json, única solução disponível nas outras linguagens de programação, com exceção do Python , cuja sintaxe do JSON corresponde aos seus dois tipos principais: as listas e os dicionários.

A partir de 2009 , os navegadores começaram a integrar suporte nativo para o formato JSON. Isso facilita seu manuseio, segurança (contra a avaliação de scripts maliciosos incluídos em uma string JSON) e velocidade de processamento. Assim, os navegadores Firefox 3.5, IE 8 ou Opera 10.5 o integram nativamente.

A avaliação de uma expressão JSON em JavaScript para transformá-la em um objeto é feita da seguinte maneira:

var donnees = JSON.parse(donnees_json);

Diferentes bibliotecas javascript oferecem suporte a navegadores mais antigos com sintaxe semelhante.

Extensões de formato

JSONP

JSONP ou JSON-P (para JSON com preenchimento , em francês, “JSON avec formage”) é uma extensão em que o nome da função de retorno é indicado. A ideia original veio do blog de Bob Ippolito em 2005 e agora é popular em aplicativos da Web 2.0 , como o kit de ferramentas de aplicativos do Google . As melhorias são planejadas para adicionar argumentos a ele.

JSONP usa tags de script, as chamadas são abertas. Assim, JSONP pode ser impróprio para transmitir informações confidenciais.

JSON5

JSON5 é uma extensão da sintaxe JSON, destinada a contornar as limitações da última.

Especificação
  • Os nomes dos campos não estão mais entre aspas
  • Suporte para comentários (em uma ou mais linhas)
  • Os números podem ser representados em formato hexadecimal, ser precedidos por um sinal positivo (+), ter o valor Infinity ou NaN
  • Possibilidade de exibir o sinal positivo para números
  • Espaço em branco adicional permitido
  • As cadeias de caracteres podem estar contidas entre apóstrofos

HJSON

HJSON é uma extensão da sintaxe JSON, servindo ao mesmo propósito que JSON5 (veja acima).

Especificação
  • Os campos podem ser separados por uma nova linha em vez de uma vírgula
  • Possibilidade de escrever comentários (#, //, / * ... * /)
  • O uso de aspas para encapsular uma sequência de caracteres não é obrigatório
  • Strings podem ser escritos em várias linhas

Apêndices

Artigos relacionados

  • BSON ( Binary JSON ): um formato que amplia as possibilidades do JSON (temporal, dados binários, etc.), notadamente usado pelo MongoDB  ;
  • TopoJSON  : um formato para armazenar dados topológicos;
  • GeoJSON  : um formato para armazenar dados geográficos;
  • YAML  : outra linguagem de serialização de dados.
  • JSON-LD  : (para JavaScript Object Notation para dados de link) é um padrão W3C para dados estruturados na web usando JSON.

links externos

Notas e referências

  1. + Bastien L , “  JSON: tudo que você precisa saber sobre o formato de dados JavaScript Object Notation  ” , em LeBigData.fr ,5 de dezembro de 2018(acessado em 5 de fevereiro de 2020 )
  2. "  https://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-404%201st%20edition%20October%202013.pdf  "
  3. (em) Request for comments n o  8259 .
  4. http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
  5. http://www.json.org/
  6. (in) szabgab , "  Parsing NaN in JSON - JavaScript and Perl  " on Perl Maven (acessado em 5 de fevereiro de 2020 )
  7. (em) "  Hjson, uma interface de usuário para JSON  " em hjson.github.io (acessado em 5 de fevereiro de 2020 )
  8. Douglas Crockford, “  Comments in JSON,  ” on Douglas Crockford Google+ Account Posts ,1 st maio 2012(acessado em 27 de maio de 2015 )
  9. (em) "  Can I use JSON parsing ...  " em caniuse.com (acessado em 5 de fevereiro de 2020 )
  10. "  Uma solicitação de vários domínios usando JSONP  " , em www.journaldunet.com (acessado em 5 de fevereiro de 2020 )
  11. (em) JSON remoto - JSONP  " ,5 de dezembro de 2005.
  12. (em) Tutorial do GWT: Como ler serviços da Web do lado do cliente com JSONP  " .
  13. (em) "  JSONPP  " ,11 de junho de 2008.
  14. (em) W3C, "  The JSON-LD Vocabulary  " ,3 de janeiro de 2020
  15. (in) '  Home - schema.org  " em schema.org (acessado em 5 de fevereiro de 2020 )