Şu ana kadar verilen yanıtlarla ilgili iki sorun; örneğin, biri standart olmayan JSON'u yayınlarsa. Çünkü o zaman kişi gelen bir dizeyi yorumlamak zorunda kalabilir (bir python sözlüğü değil).
Sorun 1 - demjson
: Python 3.7. + İle ve conda kullanarak demjson'u yükleyemedim, çünkü açıkça Python> 3.5'i desteklemiyor. Bu yüzden daha basit araçlara sahip bir çözüme ihtiyacım var, örneğin ast
ve / veya json.dumps
.
Sayı 2 - ast
&json.dumps
: Bir JSON hem tek tırnaklıysa hem de en az bir değerde bir dize içeriyorsa, bu da tek tırnak işareti içeriyorsa, bulduğum tek basit ama pratik çözüm her ikisini de uygulamaktır:
Aşağıdaki örnekte line
, gelen JSON dize nesnesi olduğunu varsayıyoruz :
>>> line = str({'abc':'008565','name':'xyz','description':'can control TV\'s and more'})
Adım 1: Gelen dizeyi ast.literal_eval()
2. Adım'ı kullanarak bir sözlüğe json.dumps
dönüştürün: Anahtarların ve değerlerin güvenilir bir şekilde dönüştürülmesi için buna başvurun, ancak değerlerin içeriğine dokunmadan :
>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
json.dumps
JSON'u yorumlamadığı için yalnızca dizeyi gördüğü için işi tek başına yapmaz. Benzer ast.literal_eval()
: JSON'u (sözlük) doğru yorumlasa da, ihtiyacımız olanı dönüştürmez.