Dua masalah dengan jawaban yang diberikan sejauh ini, jika, misalnya, seseorang mengalirkan JSON yang tidak standar tersebut. Karena dengan demikian seseorang mungkin harus menafsirkan string yang masuk (bukan kamus python).
Masalah 1 - demjson
: Dengan Python 3.7. + Dan menggunakan conda saya tidak dapat menginstal demjson karena jelas tidak mendukung Python> 3.5 saat ini. Jadi saya butuh solusi dengan cara yang lebih sederhana, misalnya ast
dan / atau json.dumps
.
Masalah 2 - ast
& json.dumps
: Jika JSON adalah kutipan tunggal dan berisi string setidaknya dalam satu nilai, yang pada gilirannya berisi tanda kutip tunggal, satu-satunya solusi sederhana namun praktis yang saya temukan adalah menerapkan keduanya:
Dalam contoh berikut kami asumsikan line
adalah objek string JSON yang masuk:
>>> line = str({'abc':'008565','name':'xyz','description':'can control TV\'s and more'})
Langkah 1: ubah string yang masuk menjadi kamus menggunakan ast.literal_eval()
Langkah 2: terapkan json.dumps
padanya untuk konversi kunci dan nilai yang dapat diandalkan, tetapi tanpa menyentuh konten nilai :
>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
json.dumps
saja tidak akan melakukan pekerjaan itu karena tidak menafsirkan JSON, tetapi hanya melihat stringnya. Serupa untuk ast.literal_eval()
: meskipun menafsirkan JSON (kamus) dengan benar, itu tidak mengubah apa yang kita butuhkan.