import json
def convert_to_json_string_1(data):
return json.dumps([{'name': i[0], 'value': i[1]} for i in data], indent=4)
def convert_to_json_string_2(data):
return json.dumps({'data': [{'name': i[0], 'value': i[1]} for i in data]}, indent=4)
Format json sebenarnya mensirikan objek Python ke dalam fail teks biasa (untuk Python) Fungsi json.dumps menukar (mensiri) objek python kepada rentetan json bermaksud menggunakan 4 ruang untuk mengesot, rentetan ini juga merupakan rentetan biasa, anda boleh:
with open('some-file.json', 'w') as handle:
handle.write(convert_to_json_string_1(data)
Untuk pemula, kod di atas mungkin tidak mudah difahami Mari kita tulis fungsi pertama dengan cara yang lebih bodoh:
def convert_to_json_string_1(data):
ret = [] # 需要序列化的列表
for i in data:
tmp = {'name': i[0], 'value': i[1]} # 通过data的每一个元素构造一个字典
ret.append(tmp)
ret = json.dumps(ret, indent=4)
return ret
@pylego Terdapat masalah. Contoh output anda bukan json standard (untuk definisi standard json, sila rujuk: Memperkenalkan JSON {} ialah objek js, sama dengan kamus Python daripada kunci. Terdiri daripada pasangan nilai, contoh yang anda berikan:
import json
data = [['美国', 46], ['英国', 27], ['中国', 26]]
names = 'name value'.split()
data = [dict(zip(names, d)) for d in data]
with open('out.json', 'w') as writer:
json_data = json.dumps(data, sort_keys=True, indent=4, separators=(',', ': '), ensure_ascii=False)
print(json_data, file=writer)
Kaedahnya hendaklah serupa untuk semua orang, dan boleh dibahagikan secara kasar kepada tiga bahagian:
Tukar data kepada bentuk yang diingini: senarai kamus
Gunakan modul json untuk menukar data kepada json_data
Tulis ke fail
(1) Tukar data kepada bentuk yang diingini: senarai kamus
Bahagian pertama agak berbeza saya memilih untuk mencipta names senarai ini dahulu:
names = 'name value'.split()
Sebenarnya ini serupa dengan:
names = ['name', 'value']
adalah sama, tetapi saya sangat suka kaedah menggunakan split kerana ia lebih cepat untuk menulis (apabila terdapat banyak projek, anda tidak perlu meletakkan tanda petikan begitu banyak).
Kemudian saya menggunakan pemahaman senarai untuk membuat senarai kamus:
data = [dict(zip(names, d)) for d in data]
Gunakan pertama for d in data untuk mengulang setiap pasangan dalam data, dan kemudian gunakan zip untuk menggabungkan nama projek dengan nilai yang sepadan:
Saya rasa hasil yang anda inginkan mungkin:
atau:
Format json sebenarnya mensirikan objek Python ke dalam fail teks biasa (untuk Python)
Fungsi json.dumps menukar (mensiri) objek python kepada rentetan json bermaksud menggunakan 4 ruang untuk mengesot, rentetan ini juga merupakan rentetan biasa, anda boleh:
Untuk pemula, kod di atas mungkin tidak mudah difahami Mari kita tulis fungsi pertama dengan cara yang lebih bodoh:
Mengenai soalan
@pylego Terdapat masalah. Contoh output anda bukan json standard (untuk definisi standard json, sila rujuk: Memperkenalkan JSON
{}
ialah objek js, sama dengan kamus Python daripada kunci. Terdiri daripada pasangan nilai, contoh yang anda berikan:Jelas sekali tidak mematuhi peraturan, jadi teka:
itulah yang anda mahukan.
Bagaimana untuk melakukannya
Kaedahnya hendaklah serupa untuk semua orang, dan boleh dibahagikan secara kasar kepada tiga bahagian:
Tukar
data
kepada bentuk yang diingini: senarai kamusGunakan modul
json
untuk menukardata
kepadajson_data
Tulis ke fail
(1) Tukar
data
kepada bentuk yang diingini: senarai kamusBahagian pertama agak berbeza saya memilih untuk mencipta
names
senarai ini dahulu:Sebenarnya ini serupa dengan:
adalah sama, tetapi saya sangat suka kaedah menggunakan
split
kerana ia lebih cepat untuk menulis (apabila terdapat banyak projek, anda tidak perlu meletakkan tanda petikan begitu banyak).Kemudian saya menggunakan pemahaman senarai untuk membuat senarai kamus:
Gunakan pertama
for d in data
untuk mengulang setiap pasangan dalamdata
, dan kemudian gunakanzip
untuk menggabungkan nama projek dengan nilai yang sepadan:Kemudian
dict
boleh mengambil iterables (setiap item ialah pasangan nilai kunci, seperti tuple dua elemen), mencipta kamus.(2) Gunakan modul
json
untuk menukardata
kepadajson_data
Bahagian kedua, membuang
json_data
, ini agak mudah, hanya gunakandumps
, lihat json.dumpssort_keys
: akan mengisih kekunci dalamobject
dalam json, yang boleh ditetapkan atau tidakindent
: Tetapkan lekukanseparators
: Tetapkan simbol pembatas untuk output json,','
digunakan untuk memisahkan item,': '
digunakan untuk memisahkan kunci dan nilaiensure_ascii
: Tetapkan kepadaFalse
untuk melumpuhkan unikod melarikan diri(3) Tulis ke fail
Tiada yang istimewa, gunakan
with
untuk mengendalikan suis fail, gunakanprint(file=XXX)
untuk mengeluarkanSoalan yang saya jawab: Python-QA