Maison  >  Questions et réponses  >  le corps du texte

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

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

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

如何转换为json格式的文件

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

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

PHP中文网PHP中文网2741 Il y a quelques jours736

répondre à tous(2)je répondrai

  • PHP中文网

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

    Je pense que le résultat que vous souhaitez peut être :

    [
        {
            "name": "美国",
            "value": 46
        },
        {
            "name": "英国",
            "value": 27
        },
        {
            "name": "中国",
            "value": 26
        }
    ]

    ou :

    {
        "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)

    Le format json sérialise en fait un objet Python dans un fichier texte brut (pour Python)
    La fonction json.dumps convertit (sérialise) un objet python en une chaîne json, ce qui signifie utiliser 4 espaces pour indenter cette chaîne. est aussi une chaîne normale, vous pouvez :

    with open('some-file.json', 'w') as handle:
        handle.write(convert_to_json_string_1(data)

    Pour les débutants, le code ci-dessus n'est peut-être pas facile à comprendre. Écrivons la première fonction d'une manière plus idiote :

    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

    répondre
    0
  • PHP中文网

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

    À propos de la question

    @pylego Il y a un problème. Votre exemple de sortie n'est pas un json standard (pour la définition standard de json, veuillez vous référer à : Présentation de JSON {} est un objet js, similaire au dictionnaire Python. de clés. Composé de paires de valeurs, l'exemple que vous avez donné :

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

    Évidemment non conforme à la réglementation, alors devinez :

    [
        {
            "name": "美国",
            "value": 46
        },
        {
            "name": "英国",
            "value": 27
        },
        {
            "name": "中国",
            "value": 26
        }
    ]

    c'est ce que tu veux.

    Comment faire

    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)

    Les méthodes doivent être similaires pour tout le monde et peuvent être grossièrement divisées en trois parties :

    • Convertir data à la forme souhaitée : liste de dictionnaire

    • Utilisez le module json pour convertir data en json_data

    • Écrire dans un fichier

    (1) Convertir data à la forme souhaitée : liste de dictionnaire

    La première partie est assez différente. J'ai choisi de créer names cette liste en premier :

    names = 'name value'.split()

    En fait, cela ressemble à :

    names = ['name', 'value']

    c'est pareil, mais j'aime beaucoup la méthode d'utilisation de split car c'est plus rapide à écrire (quand il y a beaucoup de projets, on n'a pas besoin de mettre autant de guillemets).

    Ensuite j'utilise une compréhension de liste pour créer une liste de dictionnaire :

    data = [dict(zip(names, d)) for d in data]

    Utilisez d'abord for d in data pour parcourir chaque paire dans data, puis utilisez zip pour combiner le nom du projet avec la valeur correspondante :

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

    Ensuite, dict peut intégrer un itérable (chaque élément est une paire clé-valeur, comme un tuple à deux éléments), créant ainsi un dictionnaire.

    (2) Utilisez le module json pour convertir data en json_data

    La deuxième partie, le dumping json_data, c'est assez simple, il suffit d'utiliser dumps, voir json.dumps

    json_data = json.dumps(data, sort_keys=True, indent=4, separators=(',', ': '), ensure_ascii=False) 
    • sort_keys : triera les clés en object en json, qui peut être défini ou non

    • indent : Définir l'indentation

    • separators : Définissez le symbole délimiteur pour la sortie json, ',' est utilisé pour séparer les éléments, ': ' est utilisé pour séparer les clés et les valeurs

    • ensure_ascii : défini sur False pour désactiver l'échappement Unicode

    • lors de l'impression

    (3) Écrire dans un fichier

    Rien de spécial, utilisez with pour gérer les changements de fichiers, utilisez print(file=XXX) pour afficher


    Questions auxquelles j'ai répondu : Python-QA

    répondre
    0
  • Annulerrépondre