cari

Rumah  >  Soal Jawab  >  teks badan

python - 数据库提取出的数据转json

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

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

如何转换为json格式的文件

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

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

PHP中文网PHP中文网2811 hari yang lalu760

membalas semua(2)saya akan balas

  • PHP中文网

    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

    balas
    0
  • PHP中文网

    PHP中文网2017-04-18 09:30:56

    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

    balas
    0
  • Batalbalas