Exemplo: O código a seguir é válido com relação à Especificação JSON ?
{
precision: "zip"
}
Ou devo sempre usar a seguinte sintaxe? (E se sim, por quê?)
{
"precision": "zip"
}
Eu realmente não encontrei algo sobre isso nas especificações JSON. Embora eles usem aspas em torno de suas chaves em seus exemplos.
json
specifications
standards-compliance
json5
christianvuerings
fonte
fonte
Você está correto ao usar seqüências de caracteres como a chave. Aqui está um trecho da RFC 4627 - O tipo de mídia application / json para JavaScript Object Notation (JSON)
Leia toda a RFC aqui .
fonte
A string begins and ends with quotation marks.
.De 2.2. Objetos
e de 2,5. Cordas
Então, eu diria que, de acordo com o padrão: sim, você deve sempre citar a chave (embora alguns analisadores possam perdoar mais)
fonte
Sim, as cotações são obrigatórias. http://json.org/ diz:
fonte
Sim, eles fazem. Mas se você precisar de outra forma, faça o checkout JSON5 .
JSON5 é um superconjunto de JSON que permite a sintaxe do ES5, incluindo:
A implementação de referência JSON5 (
json5
pacote npm ) fornece umJSON5
objeto que possuiparse
estringify
métodos com os mesmos argumentos e semânticas que oJSON
objeto interno .fonte
Como você pode colocar a notação pontilhada "parent.child" e não precisar colocar parent ["child"], que também é válido e útil, eu diria que ambas as formas são tecnicamente aceitáveis. Todos os analisadores devem fazer os dois lados muito bem. Se o seu analisador não precisar de aspas nas teclas, provavelmente é melhor não colocá-las (economiza espaço). Faz sentido chamá-las de strings, porque é isso que elas são, e como os colchetes oferecem a capacidade de usar valores para chaves, essencialmente faz todo o sentido não usar. Em Json você pode colocar ...
muito bem, sem problemas, se você precisar de um valor para uma chave e nenhum citado não funcionar, por isso, se não funcionar, você não poderá, portanto, não precisará "não precisa de aspas nas chaves". Mesmo que seja certo dizer que são tecnicamente cordas. A lógica e o uso argumentam o contrário. Nem produz oficialmente o Objeto {"someKey": "someValue"} para obj em nosso exemplo, executado no console de qualquer navegador.
fonte
obj
no console, o navegador exibe alguma representação legível por humanos do objeto. Pode exibi-lo como um objeto literal (como no seu exemplo), ou pode usar alguma outra representação, até mesmo interativa. Literais de objeto JavaScript não requerem aspas em torno de um nome de chave se a chave for um identificador válido e não uma palavra reservada. No entanto, o JSON sempre exige aspas em torno dos nomes das chaves.obj
no console, tenteJSON.stringify(obj)
. Agora você verá uma representação JSON válida do objeto, completa com o nome da chave entre aspas. Por outro lado, para verificar se uma sequência é JSON válida, tenteJSON.parse(string)
. Se as chaves não forem citadas, isso gerará uma exceção. Por exemplo,JSON.parse('{"a":"b"}')
terá sucesso, masJSON.parse('{a:"b"}')
falhará.var obj = {[keyName]:"someValue"};
é muito interessante! Eu não sabia que você poderia fazer isso em um literal de objeto JavaScript. Um pouco de verificação mostra que isso é algo novo no ES6 - você não poderia fazê-lo no ES5.