185 votes

Impossible d'accéder à la propriété JSON avec le tiret " - ".

Je ne parviens pas à extraire une valeur d'un objet json lorsque la chaîne de caractères contient un tiret :

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

Si j'essaie de faire référence à l'analyse de la jsonObj.profile-id il retourne ReferenceError: "id" is not defined mais jsonObj.user_id retournera 6789

Je n'ai aucun moyen de modifier les valeurs renvoyées par l'appel d'api externe et le fait d'essayer d'analyser la chaîne renvoyée afin de supprimer les tirets ruinera les urls, etc. qui sont également transmises. Comment faire ?

376voto

SLaks Points 391154

jsonObj.profile-id est une expression de soustraction (i.e. jsonObj.profile - id ).

Pour accéder à une clé qui contient des caractères qui ne peuvent pas apparaître dans un identifiant, utilisez des parenthèses :

jsonObj["profile-id"]

5voto

En plus de cette réponse Dans ce cas, notez que dans Node.js si vous accédez à JSON avec la syntaxe array [] toutes les clés JSON imbriquées doivent suivre cette syntaxe

C'est la mauvaise façon

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

et vous obtiendrez l'erreur 'undefined'.

C'est la manière correcte

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

1voto

t.vdh Points 19

Pour ansible, et en utilisant le trait d'union, cela a fonctionné pour moi :

    - name: free-ud-ssd-space-in-percent
      debug:
        var: clusterInfo.json.content["free-ud-ssd-space-in-percent"]

0voto

brianfit Points 1135

Pour tous ceux qui essaient d'appliquer la solution acceptée aux modèles de valeurs HomeAssistant, vous devez utiliser des guillemets simples si vous vous imbriquez dans des doubles :

value_template: "{{ value_json['internet-computer'].usd }}"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X