Existe um padrão na nomeação JSON? Vejo a maioria dos exemplos usando todas as minúsculas separadas por sublinhado (minúsculas). Mas, você pode usar PascalCase ou camelCase?
Fiquei curioso sobre o que alguns líderes da indústria escolheram. As APIs do Twitter e do Facebook usam snake_case, enquanto a Microsoft e o Google usam o camelCase.
23416 Justin
2
@ Justin, porque o Twitter está usando Ruby e o Facebook está usando PHP. Ruby e PHP estão no snake_case. Microsoft e Google estão bem usando C / .NET e Java, respectivamente. Ah, isso mesmo .Net e Java estão no camelCase talvez. É tudo sobre as convenções das linguagens de programação
Abel Callejo 12/12
11
Não existe um padrão, mas a convenção parece usar o padrão da tecnologia do sistema receptor.
Martin of Hessle
11
Todos estão corretos, não há uma convenção rigorosa para nomes / chaves no JSON. No entanto, eu recomendo evitar o caso de kebab, pois ele não pode ser acessado pela notação de ponto (.) Em javascript e deve ser acessado usando a notação de matriz [], que eu acho tediosa.
saurabh
2
Fechado como baseado principalmente em opiniões? O OP estava solicitando fatos sobre as capacidades / limitações do formato, não para a opinião de ninguém. Ele disse "você pode", não "você deveria". Talvez o OP não tenha escrito com clareza suficiente para esses cinco indivíduos, mas você teria que ter uma compreensão de leitura bastante fraca para não entender o que ele está pedindo.
dynamichael
Respostas:
251
Não existe um padrão ÚNICO, mas já vi três estilos mencionados ("Pascal / Microsoft", "Java" ( camelCase) e "C" (sublinhados snake_case)) - bem como pelo menos mais um, kebab-casecomo longer-name).
Parece depender principalmente do que os desenvolvedores de segundo plano do serviço em questão tinham; aqueles com experiência em c / c ++ (ou linguagens que adotam nomes semelhantes, que incluem muitas linguagens de script, ruby etc.) geralmente escolhem a variação de sublinhado; e descanse da mesma forma (Java vs .NET). A biblioteca Jackson mencionada, por exemplo, assume a convenção de nomenclatura do bean Java ( camelCase)
ATUALIZAÇÃO: minha definição de "padrão" é uma convenção ÚNICA. Portanto, embora alguém possa dizer "sim, existem muitos padrões", para mim existem vários Naming Conventions, nenhum dos quais é "o" padrão geral. Um deles pode ser considerado o padrão para plataforma específica, mas como o JSON é usado para interoperabilidade entre plataformas que podem ou não fazer muito sentido.
Manter o background dos desenvolvedores é importante, mas o JSON segue o padrão Javascript. Sua primeira afirmação não está correta. Mas fique atento às convenções de nomenclatura de sua equipe.
Anubian Noob
8
Seria interessante ver algumas estatísticas, pois há atrito constante entre pessoas que reivindicam conexão entre JSON e Javascript (além do patrimônio histórico) e aquelas que pensam que há pouco atualmente que conecta JSON a Javascript. Eu pertenço ao último acampamento. Mas eu estaria interessado em conhecer padrões de uso relativo.
precisa saber é o seguinte
O @StaxMan C # usa PascalCase na maioria dos casos, não o camelCase.
ArtOfCode 9/12
@ArtOfCode yes. Onde vc quer chegar? (também, caso pascal às vezes chamado de "caso camelo superior")
StaxMan
@StaxMan você considerar atualizar sua resposta para incluir menção de Guia Googles Estilo
garrettmac
402
Neste documento, o Google JSON Style Guide (recomendações para a criação de APIs JSON no Google),
Recomenda que:
Os nomes das propriedades devem ser cadeias ASCII camelCased .
O primeiro caractere deve ser uma letra, um sublinhado (_) ou um cifrão ($).
Aparentemente, o Google mudou as diretrizes, não encontramos nada sobre o caso camelo ou começando com a letra, _ ou US $ no documento mais ...
theeye
32
@TheEye Ainda está lá, basta clicar no menu suspenso.
Gdw2
5
Bom olho, @ gdw2. Para outras pessoas no futuro, é se você clicar no botão de seta por Property Name Guidelines->Property Name Format->Choose meaningful property names..
Panzercrisis
3
Alguém pode explicar por que e quando você usaria um sublinhado para prefixar o nome de uma propriedade? Uma referência seria útil, não apenas uma opinião.
Sean Glover
4
citar o Google não é uma resposta adequada. eles apenas apóiam uma certa convenção / diretriz e parece que o java faz sentido, pois é bastante orientado a java.
A sintaxe JSON não impõe nenhuma restrição às strings usadas como nomes, ...
O que significa que camelCase ou snake_case deve funcionar bem.
Fatores de condução
A imposição de uma convenção de nomenclatura JSON é muito confusa. No entanto, isso pode ser facilmente descoberto se você a dividir em componentes.
Linguagem de programação para gerar JSON
Python - snake_case
PHP - snake_case
Java - camelCase
JavaScript - camelCase
O próprio JSON não possui nomes padrão de chaves
Linguagem de programação para analisar JSON
Python - snake_case
PHP - snake_case
Java - camelCase
JavaScript - camelCase
Combine os componentes
Python »JSON» Python - snake_case - unânime
Python »JSON» PHP - snake_case - unânime
Python »JSON» Java - snake_case - veja o problema do Java abaixo
Python »JSON» JavaScript - snake_case fará sentido; enrosque o front-end de qualquer maneira
Python »JSON» você não conhece - snake_case fará sentido; aparafuse o analisador de qualquer maneira
PHP »JSON» Python - snake_case - unânime
PHP »JSON» PHP - snake_case - unânime
PHP »JSON» Java - snake_case - veja o problema de Java abaixo
PHP »JSON» JavaScript - snake_case fará sentido; enrosque o front-end de qualquer maneira
PHP »JSON» você não sabe - snake_case fará sentido; aparafuse o analisador de qualquer maneira
Java »JSON» Python - snake_case - veja o problema do Java abaixo
Java »JSON» PHP - snake_case - veja o problema de Java abaixo
Java »JSON» Java - camelCase - unânime
Java »JSON» JavaScript - camelCase - unânime
Java »JSON» você não conhece - camelCase fará sentido; aparafuse o analisador de qualquer maneira
JavaScript »JSON» Python - snake_case fará sentido; enrosque o front-end de qualquer maneira
JavaScript »JSON» PHP - snake_case fará sentido; enrosque o front-end de qualquer maneira
JavaScript »JSON» Java - camelCase - unânime
JavaScript »JSON» JavaScript - camelCase - Original
Problema de Java
snake_case ainda fará sentido para aqueles com entradas Java, porque as bibliotecas JSON existentes para Java estão usando apenas métodos para acessar as chaves em vez de usar o dot.syntax padrão . Isso significa que não seria demais para Java acessar as chaves snake_cased em comparação com a outra linguagem de programação que pode executar a dot.syntax .
A escolha da convenção de nomenclatura JSON correta para sua implementação JSON depende da sua pilha de tecnologia. Há casos em que é possível usar snake_case , camelCase ou qualquer outra convenção de nomenclatura.
Outra coisa a considerar é o peso a ser colocado no gerador JSON versus o analisador JSON e / ou no JavaScript front-end. Em geral, mais peso deve ser colocado no lado do gerador JSON em vez do lado do analisador JSON. Isso ocorre porque a lógica de negócios geralmente reside no lado do gerador JSON.
Além disso, se o lado do analisador JSON for desconhecido, você poderá declarar o que pode funcionar para você.
@stoft provavelmente porque eles também seguiram a convenção do schema.org. Iniciar a chave com uma letra maiúscula significa que é uma entidade de vocabulário. Iniciar a chave com letra minúscula significa que é uma propriedade do vocabulário.
Abel Callejo
2
Não concordo com essas idéias, simplesmente porque o front-end do Python> front-end do Java deve ser camelCase, mas você adiciona o front-end do Python e comprometeu o back-end e um front-end. Deve ser como o back-end o possui por "padrão". Analisadores de frontend tê-lo mais fácil de se adaptar de qualquer maneira
Bojan Kogoj
2
Minha preocupação aqui é que haja referência à pilha "sua tecnologia". Um produtor de JSON, especialmente se for atendido por um servidor HTTP, não deve ter conhecimento de quem ou o que está consumindo, ou por quais razões. Se o JSON for usado como um método de comunicação entre muitos produtores e consumidores, a pilha de tecnologia do produtor não deve ser considerada.
Robbie Wareham
11
@RobbieWareham De alguma forma, concordo com isso. A questão aqui é que "por padrões" não existe uma convenção oficial de nomes. Portanto, com isso, talvez se deva optar por "de fato", que é olhar para a pilha de tecnologias. Eu acho que olhar para a pilha de tecnologia é o melhor caminho a percorrer. Dê uma olhada no facebook, eles historicamente honram o JavaScript e usam o snakeCase? Nah! Eles escolheram ficar com o snake_case do PHP.
Abel Callejo
18
Especialmente para mim no NodeJS, se estou trabalhando com bancos de dados e meus nomes de campos estão separados por sublinhado, também os uso nas chaves struct.
Isso ocorre porque os campos db têm muitos acrônimos / abreviações, então algo como appSNSInterfaceRRTest parece um pouco confuso, mas app_sns_interface_rr_test é mais agradável.
No Javascript, as variáveis são todas camelCase e os nomes das classes (construtores) são ProperCase, então você verá algo como
var devTask ={
task_id:120,
store_id:2118,
task_name:'generalLedger'};
E é claro que as chaves / strings JSON são colocadas entre aspas duplas, mas você simplesmente usa o JSON.stringify e passa nos objetos JS, portanto, não precisa se preocupar com isso.
Eu lutei um pouco com isso até encontrar esse meio termo entre as convenções de nomenclatura JSON e JS.
o mesmo aqui. Receber JSON com snake_case no cliente Android parece estranho !! Além disso, o banco de dados não diferencia as maiúsculas e minúsculas dos nomes das colunas; portanto, snake_case parece ser o melhor para o banco de dados.
Mythicalcoder
O @mythicalcoder JSON em Java não é intrínseco em seu núcleo. Java usa apenas pacotes externos para analisar Java org.json, por exemplo gson,. Recebendo dados snake_case não doer tanto assim ...JSONObject.get('snake_case_key_here')
Como outros já declararam, não existe um padrão, então você deve escolher um. Aqui estão algumas coisas a considerar ao fazer isso:
Se você estiver usando JavaScript para consumir JSON, o uso da mesma convenção de nomenclatura para propriedades em ambos fornecerá consistência visual e possivelmente algumas oportunidades para reutilização de código mais limpa.
Um pequeno motivo para evitar o caso de kebab é que os hífens podem colidir visualmente com -caracteres que aparecem em valores.
Respostas:
Não existe um padrão ÚNICO, mas já vi três estilos mencionados ("Pascal / Microsoft", "Java" (
camelCase
) e "C" (sublinhadossnake_case
)) - bem como pelo menos mais um,kebab-case
comolonger-name
).Parece depender principalmente do que os desenvolvedores de segundo plano do serviço em questão tinham; aqueles com experiência em c / c ++ (ou linguagens que adotam nomes semelhantes, que incluem muitas linguagens de script, ruby etc.) geralmente escolhem a variação de sublinhado; e descanse da mesma forma (Java vs .NET). A biblioteca Jackson mencionada, por exemplo, assume a convenção de nomenclatura do bean Java (
camelCase
)ATUALIZAÇÃO: minha definição de "padrão" é uma convenção ÚNICA. Portanto, embora alguém possa dizer "sim, existem muitos padrões", para mim existem vários
Naming Conventions
, nenhum dos quais é "o" padrão geral. Um deles pode ser considerado o padrão para plataforma específica, mas como o JSON é usado para interoperabilidade entre plataformas que podem ou não fazer muito sentido.fonte
Neste documento, o Google JSON Style Guide (recomendações para a criação de APIs JSON no Google),
Recomenda que:
Os nomes das propriedades devem ser cadeias ASCII camelCased .
O primeiro caractere deve ser uma letra, um sublinhado (_) ou um cifrão ($).
Exemplo:
Minha equipe segue esta convenção.
fonte
Property Name Guidelines->Property Name Format->Choose meaningful property names.
.Premissa
Não há nomes padrão de chaves no JSON . De acordo com a seção Objetos da especificação:
O que significa que camelCase ou snake_case deve funcionar bem.
Fatores de condução
A imposição de uma convenção de nomenclatura JSON é muito confusa. No entanto, isso pode ser facilmente descoberto se você a dividir em componentes.
Linguagem de programação para gerar JSON
O próprio JSON não possui nomes padrão de chaves
Linguagem de programação para analisar JSON
Combine os componentes
Problema de Java
snake_case ainda fará sentido para aqueles com entradas Java, porque as bibliotecas JSON existentes para Java estão usando apenas métodos para acessar as chaves em vez de usar o dot.syntax padrão . Isso significa que não seria demais para Java acessar as chaves snake_cased em comparação com a outra linguagem de programação que pode executar a dot.syntax .
Exemplo para o pacote do Java
org.json
JsonObject.getString("snake_cased_key")
Exemplo para o pacote do Java
com.google.gson
JsonElement.getAsString("snake_cased_key")
Algumas implementações reais
Conclusões
A escolha da convenção de nomenclatura JSON correta para sua implementação JSON depende da sua pilha de tecnologia. Há casos em que é possível usar snake_case , camelCase ou qualquer outra convenção de nomenclatura.
Outra coisa a considerar é o peso a ser colocado no gerador JSON versus o analisador JSON e / ou no JavaScript front-end. Em geral, mais peso deve ser colocado no lado do gerador JSON em vez do lado do analisador JSON. Isso ocorre porque a lógica de negócios geralmente reside no lado do gerador JSON.
Além disso, se o lado do analisador JSON for desconhecido, você poderá declarar o que pode funcionar para você.
fonte
"Person":
não é camelCase :)Especialmente para mim no NodeJS, se estou trabalhando com bancos de dados e meus nomes de campos estão separados por sublinhado, também os uso nas chaves struct.
Isso ocorre porque os campos db têm muitos acrônimos / abreviações, então algo como appSNSInterfaceRRTest parece um pouco confuso, mas app_sns_interface_rr_test é mais agradável.
No Javascript, as variáveis são todas camelCase e os nomes das classes (construtores) são ProperCase, então você verá algo como
ou
E é claro que as chaves / strings JSON são colocadas entre aspas duplas, mas você simplesmente usa o JSON.stringify e passa nos objetos JS, portanto, não precisa se preocupar com isso.
Eu lutei um pouco com isso até encontrar esse meio termo entre as convenções de nomenclatura JSON e JS.
fonte
org.json
, por exemplogson
,. Recebendo dados snake_case não doer tanto assim ...JSONObject.get('snake_case_key_here')
Parece que há variação suficiente para que as pessoas façam o possível para permitir a conversão de todas as convenções para outras: http://www.cowtowncoder.com/blog/archives/cat_json.html
Notavelmente, o analisador Jackson JSON mencionado prefere
bean_naming
.fonte
beanNaming
.Acho que não existe uma convenção oficial de nomes para o JSON, mas você pode seguir alguns líderes do setor para ver como está funcionando.
O Google, que é uma das maiores empresas de TI do mundo, tem um guia de estilo JSON: https://google.github.io/styleguide/jsoncstyleguide.xml
Aproveitando, você pode encontrar outro guia de estilos, que o Google define, aqui: https://github.com/google/styleguide
fonte
Como outros já declararam, não existe um padrão, então você deve escolher um. Aqui estão algumas coisas a considerar ao fazer isso:
Se você estiver usando JavaScript para consumir JSON, o uso da mesma convenção de nomenclatura para propriedades em ambos fornecerá consistência visual e possivelmente algumas oportunidades para reutilização de código mais limpa.
Um pequeno motivo para evitar o caso de kebab é que os hífens podem colidir visualmente com
-
caracteres que aparecem em valores.fonte