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

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

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

如何转换为json格式的文件

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

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

PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(2)
Ty80

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
Ty80

À 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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!