Qual formato JSON é a melhor escolha para pares de valores-chave e por quê?
[{"key1": "value1"}, {"key2": "value2"}]
Ou:
[{"Name": "key1", "Value": "value1"}, {"Name": "key2", "Value": "value2"}]
Ou:
{"key1": "value1", "key2": "value2"}
A primeira variante parece mais compacta e mais "semanticamente significativa". A segunda variante parece mais estruturada, o que pode ajudar a processá-la. A terceira variante parece ainda mais semântica.
Os pares de valores-chave serão usados para anexar dados arbitrários a algum outro item. Os dados devem ser serializados como JSON para contorná-los através de um sistema.
{"key1": "value1", "key2": "value2"}
?Respostas:
A escolha da primeira ou da terceira opção depende do seu caso de uso. Se você estiver modelando muitas instâncias diferentes do mesmo tipo de coisa, escolha a primeira. Por exemplo, você tem uma lista de pessoas. Se você estiver modelando muitos atributos diferentes de uma coisa, escolha a terceira. Você pode ter teclas repetidas no primeiro formato, mas não no terceiro.
A segunda opção é terrível e ainda não encontrei um caso de uso apropriado. O motivo pelo qual é terrível, além de mais detalhado, é que, para o JSON de nível único, ele quebra a conversão automática da maioria das bibliotecas em um dicionário / mapa. Para JSON profundamente aninhado, ele quebra a interface de consulta semelhante ao XPath .
Isso torna difícil trabalhar com isso. E se você não souber suas chaves no momento da compilação, desejará uma interface de dicionário ou XPath, porque não poderá convertê-las em uma classe. Pode não parecer grande coisa agora, mas quanto mais tempo você tiver um formato de dados, mais difícil será mudar.
fonte
[{"key1": "value1", "key2": "value2"}]
. O segundo formato aqui é colocar a chave real no lado direito e usar outra chave chamada "Nome" para apontar para a chave real, tornando extremamente difícil analisar com ferramentas padrão.O terceiro formato é geralmente o melhor. No entanto, aqui está um exemplo de algo adequado para o 1º formato:
Aqui, cada objeto se refere a uma coisa separada (e cada objeto usa as mesmas chaves que as outras, para que não possam ser mescladas). No entanto, cada objeto da lista é armazenado
{ "username": "foo", "id": 1 }
e não[{ "username": "foo" }, { "id": 1 }]
porque 1) é mais curto e 2) está se referindo a uma coisa com um nome de usuário e um ID, não a uma coisa com um nome de usuário e outra com um ID.O problema com a segunda opção é que ela se torna muito detalhada tanto como JSON quanto para trabalhar. No entanto, ele pode ser usado se você precisar armazenar meta-informações sobre a propriedade. Um exemplo:
Aqui
mutable
se refere a um caso hipotético de se você pode modificar a propriedade em si, não o objeto pai. Meta-informações como essa são semelhantes às do JavaScriptObject.defineProperty
, que armazena informações "configuráveis", "enumeráveis" e "graváveis" sobre uma propriedade.fonte
Você diz que esses são pares chave / valor. Nesse caso, use # 3: dicionário de pares de chave / valor.
Se esses não são pares de chave / valor, não os chame de "chaves" e "valores" e use # 2, uma matriz de dicionários com conteúdo arbitrário.
A estrutura 1 é simplesmente estúpida, a menos que você precise de pares de chave / valor, mas também a ordem deles. O que você raramente faz.
fonte
Coloque-se no lugar da pessoa que recebe o json. Se eu não souber o nome da chave, como devo recuperá-lo com o primeiro ou o último formato? Você pode percorrer o json, é claro, mas como os três formatos atingem o mesmo resultado, é apenas uma questão de sintaxe. Penso que esta é a única pergunta significativa: se você souber os nomes das chaves, a primeira ou a última opção será mais compacta, se não a segunda opção será mais compreensível.
fonte