Tidak dapat mengakses properti JSON dengan tanda hubung “-”

127

Saya tidak dapat mengambil nilai dari objek json ketika string memiliki karakter tanda hubung:

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

Jika saya mencoba untuk mereferensikan hasil parsing jsonObj.profile-id, ReferenceError: "id" is not definedtetapi jsonObj.user_id akan mengembalikan 6789

Saya tidak memiliki cara untuk mengubah nilai yang dikembalikan oleh panggilan api eksternal dan mencoba mengurai string yang dikembalikan untuk menghapus tanda hubung akan merusak url, dll., Yang diteruskan juga. Tolong?

pengguna1902467
sumber
3
Mungkin membantu untuk menambahkan informasi tentang bahasa / parser apa yang Anda coba gunakan untuk mengurai JSON.
Mike Brant
1
Utilities.jsonParsetidak banyak bicara.
Darin Dimitrov

Jawaban:

279

jsonObj.profile-idadalah ekspresi pengurangan (yaitu jsonObj.profile - id).

Untuk mengakses kunci yang berisi karakter yang tidak dapat muncul di pengenal, gunakan tanda kurung:

jsonObj["profile-id"]
SLaks
sumber
2
Terima kasih! Untuk informasi: Ini juga bekerja dengan sudut: {{jsonObj.attributes ["profile-id"]}}
BastienSander
3
ketika ini berfungsi di javascript dan implementasi aslinya untuk mengakses kunci properti objek dengan string, pastikan itu berfungsi di semua yang ada di atas
john Smith
1
Juga berfungsi untuk objek "gaya" JS! @SLaks Saya mengekstrapolasi solusi ini untuk menggunakan objek gaya JavaScript untuk menyetel properti "box-shadow". document.getElementById("someId").style["box-shadow"]="2px 2px 2px #616161";bekerja dengan baik!
Eric Hepperle - CodeSlayer2010
2
@ EricHepperle-CodeSlayer2010: Anda harus menggunakan style.boxShadowsebagai gantinya. The stylebertobat objek tanda hubung untuk CamelCase.
SLaks
Manis! Terima kasih ... Saya suka tas unta, metode lebih baik karena lebih sedikit karakter untuk diketik. Diverifikasi itu berhasil !!
Eric Hepperle - CodeSlayer2010
3

Selain jawaban ini , perhatikan bahwa di Node.js jika Anda mengakses JSON dengan sintaks array, []semua kunci JSON bersarang harus mengikuti sintaks itu

Ini jalan yang salah

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

dan akan memberi Anda kesalahan 'tidak ditentukan'.

Ini cara yang benar

json['first']['second']['third']['comment'] 
Sohel Ahmed Mesaniya
sumber
Mengapa ini menjadi masalah? Cara tinju terlihat sangat normal. Apakah ini bug dalam bahasa?
Nikola Diklic
Jika Anda ingin menggunakan metode ini. Pertimbangkan untuk menggunakan utilitas fungsional seperti ramdajs.com/docs/#path
Amrit Pal Singh
2

Untuk kemungkinan, dan menggunakan tanda hubung, ini berhasil untuk saya:

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