Không thể truy cập thuộc tính JSON bằng dash -


127

Tôi không thể truy xuất giá trị từ một đối tượng json khi chuỗi có ký tự gạch ngang:

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

Nếu tôi cố gắng tham chiếu phân tích cú pháp, jsonObj.profile-idnó sẽ trả về ReferenceError: "id" is not definednhưng jsonObj.user_id sẽ trả về 6789

Tôi không có cách nào để sửa đổi các giá trị được trả về bởi lệnh gọi api bên ngoài và cố gắng phân tích chuỗi được trả về để xóa dấu gạch ngang sẽ làm hỏng các url, v.v., cũng được thông qua. Cứu giúp?


3
Có thể giúp thêm thông tin về ngôn ngữ / trình phân tích cú pháp mà bạn đang cố sử dụng để phân tích cú pháp JSON.
Mike Brant

1
Utilities.jsonParsekhông nói nhiều.
Darin Dimitrov

Câu trả lời:


277

jsonObj.profile-idlà một biểu thức trừ (tức là jsonObj.profile - id).

Để truy cập khóa chứa các ký tự không thể xuất hiện trong mã định danh, hãy sử dụng dấu ngoặc:

jsonObj["profile-id"]

2
Cảm ơn! Để biết thông tin: Nó cũng hoạt động với angular: {{jsonObj.attribut ["profile-id"]}}
BastienSander

3
khi điều này hoạt động trong javascript và việc triển khai riêng để truy cập khóa thuộc tính đối tượng theo chuỗi, hãy chắc chắn rằng nó hoạt động ở mọi thứ trên cùng
john Smith

1
Cũng hoạt động cho đối tượng "phong cách" JS! @SLaks Tôi ngoại suy giải pháp này để sử dụng đối tượng kiểu JavaScript để đặt thuộc tính "hộp bóng". document.getElementById("someId").style["box-shadow"]="2px 2px 2px #616161";làm việc tuyệt vời
Eric Hepperle - CodeSlayer2010

2
@ EricHepperle-CodeSlayer2010: Bạn nên sử dụng style.boxShadowthay thế. Đối styletượng chuyển đổi dấu gạch nối thành camelCase.
SLaks

Ngọt! Cảm ơn ... Tôi thích trường hợp lạc đà, phương pháp tốt hơn vì ít ký tự để nhập. Xác nhận nó hoạt động !!
Eric Hepperle - CodeSlayer2010

3

Ngoài câu trả lời này , lưu ý rằng trong Node.js nếu bạn truy cập JSON bằng cú pháp mảng, []tất cả các khóa JSON lồng nhau sẽ tuân theo cú pháp đó

Đây là cách sai

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

và sẽ cung cấp cho bạn lỗi 'không xác định'.

Đây là cách chính xác

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

Tại sao điều này là một vấn đề? Cách nắm tay trông hoàn toàn bình thường. Đây có phải là một lỗi trong ngôn ngữ?
Nikola Diklic

Nếu bạn muốn đi với phương pháp này. Cân nhắc sử dụng một tiện ích chức năng như ramdajs.com/docs/#path
Amrit Pal Singh

2

Đối với ansible và sử dụng dấu gạch nối, điều này làm việc cho tôi:

    - name: free-ud-ssd-space-in-percent
      debug:
        var: clusterInfo.json.content["free-ud-ssd-space-in-percent"]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.