Zugriff auf JSON-Eigenschaft mit "-" Bindestrich nicht möglich


127

Ich kann keinen Wert von einem JSON-Objekt abrufen, wenn die Zeichenfolge ein Bindestrichzeichen enthält:

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

Wenn ich versuche , das zu referenzieren analysiert jsonObj.profile-ides gibt ReferenceError: "id" is not definedaber jsonObj.user_id wird 6789 zurückgeben

Ich habe keine Möglichkeit, die vom externen API-Aufruf zurückgegebenen Werte zu ändern, und der Versuch, die zurückgegebene Zeichenfolge zu analysieren, um Bindestriche zu entfernen, ruiniert auch URLs usw., die ebenfalls übergeben werden. Hilfe?


3
Es kann hilfreich sein, Informationen darüber hinzuzufügen, mit welcher Sprache / welchem ​​Parser Sie den JSON analysieren möchten.
— Mike Brant

1
Utilities.jsonParsesagt nicht viel.
— Darin Dimitrov

Antworten:


277

jsonObj.profile-idist ein Subtraktionsausdruck (dh jsonObj.profile - id).

Verwenden Sie Klammern, um auf einen Schlüssel zuzugreifen, der Zeichen enthält, die nicht in einem Bezeichner enthalten sein können:

jsonObj["profile-id"]

2
Vielen Dank! Zur Information: Es funktioniert auch mit Winkel: {{jsonObj.attributes ["profile-id"]}}
— BastienSander

3
Wenn dies in Javascript und der nativen Implementierung für den Zugriff auf einen Objekteigenschaftsschlüssel per Zeichenfolge funktioniert, funktioniert es sicher in allen oben genannten
— Bereichen

1
Funktioniert auch für JS "style" Objekt! @SLaks Ich habe diese Lösung auf die Verwendung des JavaScript-Objekts zum Festlegen der Eigenschaft "box-shadow" extrapoliert. document.getElementById("someId").style["box-shadow"]="2px 2px 2px #616161";funktioniert super!
— Eric Hepperle - CodeSlayer2010

2
@ EricHepperle-CodeSlayer2010: Sie sollten style.boxShadowstattdessen verwenden. Das styleObjekt konvertiert Bindestriche in camelCase.
— SLaks

Süss! Danke ... Ich mag Kamel Fall, Methode besser, weil weniger Zeichen zu tippen. Verifiziert, dass es funktioniert !!
— Eric Hepperle - CodeSlayer2010

3

Beachten Sie zusätzlich zu dieser Antwort , dass in Node.js, wenn Sie mit der Array-Syntax auf JSON zugreifen, []alle verschachtelten JSON-Schlüssel dieser Syntax folgen sollten

Das ist der falsche Weg

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

und wird Ihnen den 'undefinierten' Fehler geben.

Dies ist der richtige Weg

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

Warum ist das ein Problem? Der erste Weg sieht ganz normal aus. Ist das ein Fehler in der Sprache?
— Nikola Diklic

Wenn Sie mit dieser Methode gehen möchten. Erwägen
— Amrit Pal Singh

2

Für Ansible und mit Bindestrich funktionierte dies für mich:

    - name: free-ud-ssd-space-in-percent
      debug:
        var: clusterInfo.json.content["free-ud-ssd-space-in-percent"]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.