Maison > Questions et réponses > le corps du texte
我从数据库中取出两列数据得到
data = [['美国', 46], ['英国', 27], ['中国', 26]]
如何转换为json格式的文件
{
{
name: '美国',
value: 46
},
{
name: '英国',
value: 27
},
{
name: '中国',
value: 26
},
}
求相关的python代码。最好能附上注释,本人初学者,多包涵,真的不是很会这个问题。
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
PHP中文网2017-04-18 09:30:56
@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.
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
data
à la forme souhaitée : liste de dictionnaireLa 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.
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
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