python - 数据库提取出的数据转json
PHP中文网
PHP中文网 2017-04-18 09:28:56
0
2
755

我从数据库中取出两列数据得到

data = [['美国', 46], ['英国', 27], ['中国', 26]]

如何转换为json格式的文件

{
    {
        name: '美国',
        value: 46
    },
    {
        name: '英国',
        value: 27
    },
    {
        name: '中国',
        value: 26
    },
}

求相关的python代码。最好能附上注释,本人初学者,多包涵,真的不是很会这个问题。

PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(2)
Ty80

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
Ty80

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:

{
    {
        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.

Bagaimana untuk melakukannya

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:

# zip
'美国',  46
   |     |      =>  ('name', '美国'), ('value', 46)
'name'  'value'

Kemudian dict boleh mengambil iterables (setiap item ialah pasangan nilai kunci, seperti tuple dua elemen), mencipta kamus.

(2) Gunakan modul 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

  • semasa mencetak

(3) Tulis ke fail

Tiada yang istimewa, gunakan with untuk mengendalikan suis fail, gunakan print(file=XXX) untuk mengeluarkan


Soalan yang saya jawab: Python-QA

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan