Rumah > Soal Jawab > teks badan
我从数据库中取出两列数据得到
data = [['美国', 46], ['英国', 27], ['中国', 26]]
如何转换为json格式的文件
{
{
name: '美国',
value: 46
},
{
name: '英国',
value: 27
},
{
name: '中国',
value: 26
},
}
求相关的python代码。最好能附上注释,本人初学者,多包涵,真的不是很会这个问题。
PHP中文网2017-04-18 09:30:56
Saya rasa hasil yang anda inginkan mungkin:
[
{
"name": "美国",
"value": 46
},
{
"name": "英国",
"value": 27
},
{
"name": "中国",
"value": 26
}
]
atau:
{
"data": [
{
"name": "美国",
"value": 46
},
{
"name": "英国",
"value": 27
},
{
"name": "中国",
"value": 26
}
]
}
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
PHP中文网2017-04-18 09:30:56
@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:
{
{
name: '美国',
value: 46
},
{
name: '英国',
value: 27
},
{
name: '中国',
value: 26
},
}
Jelas sekali tidak mematuhi peraturan, jadi teka:
[
{
"name": "美国",
"value": 46
},
{
"name": "英国",
"value": 27
},
{
"name": "中国",
"value": 26
}
]
itulah yang anda mahukan.
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
data
kepada bentuk yang diingini: senarai kamusBahagian 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:
# zip
'美国', 46
| | => ('name', '美国'), ('value', 46)
'name' 'value'
Kemudian dict
boleh mengambil iterables (setiap item ialah pasangan nilai kunci, seperti tuple dua elemen), mencipta kamus.
json
untuk menukar data
kepada json_data
Bahagian kedua, membuang json_data
, ini agak mudah, hanya gunakan dumps
, lihat json.dumps
json_data = json.dumps(data, sort_keys=True, indent=4, separators=(',', ': '), ensure_ascii=False)
sort_keys
: akan mengisih kekunci dalam object
dalam json, yang boleh ditetapkan atau tidak
indent
: Tetapkan lekukan
separators
: Tetapkan simbol pembatas untuk output json, ','
digunakan untuk memisahkan item, ': '
digunakan untuk memisahkan kunci dan nilai
ensure_ascii
: Tetapkan kepada False
untuk melumpuhkan unikod melarikan diri
Tiada yang istimewa, gunakan with
untuk mengendalikan suis fail, gunakan print(file=XXX)
untuk mengeluarkan
Soalan yang saya jawab: Python-QA