É uma má prática usar hífens nas chaves JSON?

12

Vejo muitas perguntas girando em torno do acesso a chaves JSON que usam hífens (kebab-case), mas agora me pergunto se devo me ater ao camelCase ou snake_case nas minhas chaves. Eu sei que os hífens também podem criar mapeamentos complicados quando portados entre idiomas. Eu já vi algumas bibliotecas desserializadas JSON converterem essas chaves em um estilo camelCase.

Exemplo:

var something = {
  "some-value": 'thing'
}

Vs

var something = {
  "someValue": 'thing',
  "some_other_value": 'thing_two'
}
Matt Oaxaca
fonte
4
O REST não tem nada a dizer sobre formatos de carga útil.
Eric Stein
2
Por que você usa o kebab-case no JSON? As pessoas geralmente usam o camelCase para JSON porque é sempre uma boa prática seguir as convenções de nomenclatura do ambiente de programação e é uma prática padrão usar o camelCase para variáveis ​​em JavaScript. Embora eu esteja assumindo que você está usando JSON para se comunicar com JavaScript.
Alternatex
1
Vejo que a pergunta está marcada com javascript, mas a pergunta em si parece ser sobre uma API entre diferentes idiomas / bibliotecas. Se você gosta de javascript, observe que a notação de ponto não funciona com hífens.
Izkata 29/05
5
Não é realmente uma prática ruim, pois o JSON é independente da linguagem e, portanto, não deve ser restringido pela sintaxe de nenhuma linguagem específica. Dito isso, faz sentido usar apenas caracteres alfanuméricos, pois isso pode ser mapeado diretamente para identificadores em todos os idiomas principais, portanto, isso levará à menor quantidade de problemas de mapeamento.
JacquesB
1
@Alternatex: +1 para "kebab-case" :-)
gnasher729

Respostas:

13

Você pode usar qualquer coisa como chaves JSON, desde que seja UTF-8 válido, não contenha zero pontos de código e seria útil se você pudesse representar a chave como uma sequência na linguagem de programação de sua escolha. Eu recomendo não usar representações Unicode diferentes da mesma string (por exemplo "Ä" escritas como um ou dois pontos de código).

Lendo alguns comentários: Parece que algumas pessoas tentam criar classes com variáveis ​​de instância que correspondem às chaves nos dicionários JSON. O que, obviamente, não funciona se sua chave for "algum valor", a menos que você escreva COBOL. Eu acho que isso é errado. Eu tenho classes de modelo que são projetadas da maneira que eu quero. JSON é usado apenas para preencher as classes do modelo. Vou pegar o que os servidores decidiram usar para as chaves e colocá-lo nos meus objetos de modelo.

gnasher729
fonte
1
urgentemente, você pede a questão de como seu programa consumidor acessa as chaves json. Geralmente isso é feito analisando o json como um objeto. Usando hypens ou outros caracteres que impedem isso só torna a vida difícil para os seus consumidores
Ewan
E isso é válido: {"❓": "✅"}
Vinicius Brasil
1
Como os hífens impedem alguma coisa? Eu recebo um dicionário e posso usar "some-key" como chave, posso até usar "❓" como chave.
gnasher729
9

Existem muitos sistemas de serialização JSON que são mais do que capazes de lidar com o mapeamento entre nomes de campos que não são adequados para uso no idioma ao qual se integram. Na maioria dos casos, eles não são difíceis de usar e exigem apenas um pouco de esforço extra. Em um mundo ideal, você não precisaria, mas se sua API já usar traços, alterá-la seria curar pior do que a doença. Observe também que o uso de traços é o estilo mais comum em certos idiomas, principalmente os baseados no LISP, portanto, provavelmente há uma minoria silenciosa dos consumidores da sua API que ficam felizes em ver traços em vez de outro formato.

Jules
fonte
Eu vou votar o mais rápido possível. Encontrei informações, obrigado.
Matt Oaxaca
1

Depois de passar algum tempo na indústria e trabalhar em alguns sistemas. Eu não acho que exista uma prática recomendada ou revestimento adequado para chaves JSON. O aspecto mais importante de qualquer formatação (case / estilo de código / etc) é consistência e adoção da equipe.

Se a base de código for fragmentada e inconsistente, reúna-se como uma equipe e concorde com um estilo consistente e policie a formatação coletivamente.

Matt Oaxaca
fonte