Hai vấn đề với câu trả lời được đưa ra cho đến nay, ví dụ: nếu một vấn đề phát trực tuyến JSON không chuẩn như vậy. Bởi vì sau đó người ta có thể phải diễn giải một chuỗi đến (không phải từ điển python).
Vấn đề 1 - demjson
: Với Python 3.7. + Và sử dụng conda, tôi không thể cài đặt demjson vì hiện tại nó không hỗ trợ Python> 3.5. Vì vậy, tôi cần một giải pháp với các phương tiện đơn giản hơn, chẳng hạn như ast
và / hoặc json.dumps
.
Vấn đề 2 - ast
& json.dumps
: Nếu một JSON vừa được trích dẫn đơn lẻ vừa chứa một chuỗi chứa ít nhất một giá trị, đến lượt nó lại chứa các dấu ngoặc kép, thì giải pháp đơn giản nhưng thực tế duy nhất mà tôi đã tìm thấy là áp dụng cả hai:
Trong ví dụ sau, chúng tôi giả sử line
là đối tượng chuỗi JSON đến:
>>> line = str({'abc':'008565','name':'xyz','description':'can control TV\'s and more'})
Bước 1: chuyển đổi chuỗi đến thành từ điển bằng cách sử dụng ast.literal_eval()
Bước 2: áp dụng json.dumps
cho nó để chuyển đổi đáng tin cậy các khóa và giá trị, nhưng không chạm vào nội dung của các giá trị :
>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
json.dumps
một mình sẽ không thực hiện công việc vì nó không diễn giải JSON, mà chỉ thấy chuỗi. Tương tự cho ast.literal_eval()
: mặc dù nó diễn giải chính xác JSON (từ điển), nhưng nó không chuyển đổi những gì chúng ta cần.