Tôi đang cạo một số từ điển JSONP từ AWS (từ tệp javascript). Sau khi phân tích cú pháp dữ liệu thô chỉ cho dữ liệu giống JSON, trong một số trường hợp, tôi nhận được JSON hợp lệ và có thể tải thành công dữ liệu này bằng Python (json_data = json.loads(json_like_data)
). Tuy nhiên, một số JSONP của Amazon không bao gồm dấu ngoặc kép quanh khóa của chúng (xem phần sau).Python: JSON không hợp lệ - Các khóa không được trích dẫn
...
{type:"storageCurrentGen",sizes:
[{size:"i2.xlarge",vCPU:"4",ECU:"14",memoryGiB:"30.5",storageGB:"1 x 800 SSD",valueColumns:[{name:"linux",prices:{USD:"0.938"}}]},
{size:"i2.2xlarge",vCPU:"8",ECU:"27",memoryGiB:"61",storageGB:"2 x 800 SSD",valueColumns:[{name:"linux",prices:{USD:"1.876"}}]},
{size:"i2.4xlarge",vCPU:"16",ECU:"53",memoryGiB:"122",storageGB:"4 x 800 SSD",valueColumns:[{name:"linux",prices:{USD:"3.751"}}]},
...
Đối với JSONP, điều này vẫn hoạt động như cú pháp JavaScript hợp lệ. Tuy nhiên, mã vạch json.loads(json_str)
của Python không phù hợp vì nó không hợp lệ JSON.
Có một mô-đun Python YAML khác có thể xử lý các khóa không được kiểm soát, NHƯNG phải có dấu cách sau dấu chấm phẩy (:
).
Tôi cho rằng tôi có hai tùy chọn.
- Bằng cách nào đó thay thế nhân vật ở giữa một cú đúp mở hoặc dấu phẩy (
{
|,
) và dấu hai chấm (:
). Sau đó sử dụngjson.loads(...)
. - Thêm dấu cách sau dấu hai chấm (
:
). Sau đó phân tích cú pháp vớiyaml.load(...)
.
Tôi đoán rằng tùy chọn 2 tốt hơn 1. Tuy nhiên, tôi đang tìm kiếm gợi ý về giải pháp tốt hơn.
Có ai gặp phải JSON có định dạng không đúng như trước đây và sử dụng Python để phân tích cú pháp không?
Ngay cả đối với Javascript, nó là ** không ** JSON hợp lệ. Đó là JavaScript hợp lệ, điều này không hoàn toàn giống nhau. –
@MartijnPieters Ah. Cảm ơn vì bạn đã làm sáng tỏ. – dlstadther