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?

user1902467
quelle
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"]
SLaks
quelle
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'] 
Sohel Ahmed Mesaniya
quelle
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"]
t.vdh
quelle