Não foi possível acessar a propriedade JSON com o traço "-"


127

Não consigo recuperar um valor de um objeto json quando a string tem um caractere de hífen:

{
"profile-id":1234, "user_id":6789
}

Se eu tentar fazer referência ao analisado, jsonObj.profile-idele retornará, ReferenceError: "id" is not definedmas jsonObj.user_id retornará 6789

Não tenho como modificar os valores retornados pela chamada da API externa e tentar analisar a string retornada para remover traços que arruinam os URLs etc., que também são passados. Socorro?


3
Pode ser útil adicionar informações sobre qual idioma / analisador você está tentando usar para analisar o JSON.
Mike Brant

1
Utilities.jsonParsenão diz muito.
Darin Dimitrov

Respostas:


277

jsonObj.profile-idé uma expressão de subtração (ie jsonObj.profile - id).

Para acessar uma chave que contém caracteres que não podem aparecer em um identificador, use colchetes:

jsonObj["profile-id"]

2
Obrigado! Para obter informações: Ele também funciona com angular: {{jsonObj.attributes ["profile-id"]}}
BastienSander

3
quando isso funciona em javascript e sua implementação nativa para acessar uma chave de objeto propriedade por corda, se ele funciona em tudo em cima
John Smith

1
Também funciona para o objeto "estilo" JS! @SLaks Extrapolei esta solução para usar o objeto de estilo JavaScript para definir a propriedade "box-shadow". document.getElementById("someId").style["box-shadow"]="2px 2px 2px #616161";funciona bem!
Eric Hepperle - CodeSlayer2010

2
@ EricHepperle-CodeSlayer2010: Em style.boxShadowvez disso, você deve usar . O styleobjeto converte hífens em camelCase.
Slaks

Doce! Obrigado ... Eu gosto de camel case, método melhor porque menos caracteres para digitar. Verificado funciona !!
precisa saber é o seguinte

3

Além desta resposta , observe que no Node.js, se você acessa o JSON com a sintaxe da matriz, []todas as chaves JSON aninhadas devem seguir essa sintaxe

Este é o caminho errado

json.first.second.third['comment']

e fornecerá o erro "indefinido".

Esta é a maneira correta

json['first']['second']['third']['comment'] 

Por que isso é um problema? O primeiro punho parece completamente normal. Isso é um bug no idioma?
Nikola Diklic 10/09/19

Se você quiser seguir esse método. Considere usar um utilitário funcional como ramdajs.com/docs/#path
Amrit Pal Singh

2

Para ansible, e usando hífen, isso funcionou para mim:

    - name: free-ud-ssd-space-in-percent
      debug:
        var: clusterInfo.json.content["free-ud-ssd-space-in-percent"]
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.