JSON özelliğine "-" çizgi ile erişilemiyor


127

Dize bir tire karakterine sahipken bir json nesnesinden bir değer alamıyorum:

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

Ayrıştırılana başvurmaya çalışırsam jsonObj.profile-iddöndürür, ReferenceError: "id" is not definedancak jsonObj.user_id 6789 döndürür

Harici api çağrısı tarafından döndürülen değerleri değiştirmenin bir yolu yok ve kısa çizgileri kaldırmak için döndürülen dizeyi ayrıştırmaya çalışmak da aktarılan url'leri vb. Mahvedecek. Yardım?


3
JSON'u ayrıştırmak için hangi dili / ayrıştırıcıyı kullanmaya çalıştığınız hakkında bilgi eklemenize yardımcı olabilir.
Mike Brant

1
Utilities.jsonParsepek bir şey söylemiyor.
Darin Dimitrov

Yanıtlar:


280

jsonObj.profile-idbir çıkarma ifadesidir (yani jsonObj.profile - id).

Bir tanımlayıcıda görünemeyen karakterler içeren bir tuşa erişmek için parantez kullanın:

jsonObj["profile-id"]

2
Teşekkürler! Bilgi için: Ayrıca angular ile de çalışır: {{jsonObj.attributes ["profile-id"]}}
BastienSander

3
Bu, javascript ve onun yerel uygulamasında bir nesne özelliği anahtarına dizge halinde erişmek için çalıştığında, her şeyde en üstte çalıştığından emin olun
john Smith

1
Ayrıca JS "style" nesnesi için de çalışır! @SLaks Bu çözümü, "box-shadow" özelliğini ayarlamak için JavaScript stil nesnesini kullanmak üzere genişlettim. document.getElementById("someId").style["box-shadow"]="2px 2px 2px #616161";harika çalışıyor!
Eric Hepperle - CodeSlayer2010

2
@ EricHepperle-CodeSlayer2010: Bunun style.boxShadowyerine kullanmalısınız . styleNesne dönüştürür CamelCase için kısa çizgi.
SLaks

Tatlı! Teşekkürler ... Deve vakasını seviyorum, yöntemi daha iyi çünkü yazılacak daha az karakter. Çalıştığı doğrulandı !!
Eric Hepperle - CodeSlayer2010

3

Bu yanıta ek olarak , Node.js'de JSON'a dizi sözdizimi ile erişirseniz, []tüm iç içe yerleştirilmiş JSON anahtarlarının bu sözdizimini takip etmesi gerektiğini unutmayın.

Bu yanlış yol

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

ve size 'tanımsız' hata verecektir.

Bu doğru yol

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

neden bu bir sorundur? İlk yol tamamen normal görünüyor. Bu dilde bir hata mı?
Nikola Diklic

Bu yöntemle gitmek istiyorsanız. Ramdajs.com/docs/#path
Amrit Pal Singh

2

Yanıtlayıcı için ve tire kullanarak, bu benim için çalıştı:

    - name: free-ud-ssd-space-in-percent
      debug:
        var: clusterInfo.json.content["free-ud-ssd-space-in-percent"]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.