J'ai un .json
fichier (nommé meta.json
) comme ça:
{
"main": {
"title": "今日は雨が降って",
"description": "今日は雨が降って"
}
}
Je voudrais le convertir en .yaml
fichier (nommé meta.yaml
) comme :
title: "今日は雨が降って"
description: "今日は雨が降って"
Ce que j'ai fait, c'est:
import simplejson as json
import pyyaml
f = open('meta.json', 'r')
jsonData = json.load(f)
f.close()
ff = open('meta.yaml', 'w+')
yamlData = {'title':'', 'description':''}
yamlData['title'] = jsonData['main']['title']
yamlData['description'] = jsonData['main']['description']
yaml.dump(yamlData, ff)
# So you can see that what I need is the value of meta.json
Mais malheureusement, ce que j'ai obtenu est le suivant:
{description: "\u4ECA\u65E5\u306F\u96E8\u304C\u964D\u3063\u3066", title: "\u4ECA\u65E5\
\u306F\u96E8\u304C\u964D\u3063"}
Pourquoi?
pyyaml.dump () a l'option "allow_unicode", sa valeur par défaut est None, tous les caractères non ASCII dans la sortie sont échappés. Si allow_unicode = True, écrivez des chaînes Unicode brutes.
yaml.dump(data, ff, allow_unicode=True)
prime
json.dump(data, outfile, ensure_ascii=False)
Cela fonctionne pour moi:
#!/usr/bin/env python
import sys
import json
import yaml
print yaml.dump(yaml.load(json.dumps(json.loads(open(sys.argv[1]).read()))), default_flow_style=False)
Donc ce que nous faisons c'est:
Prend soin de l'unicode selon Comment obtenir des objets chaîne au lieu de ceux Unicode de JSON en Python?
In [1]: import json, yaml
In [2]: with open('test.json') as js:
...: data = json.load(js)[u'main']
...:
In [3]: with open('test.yaml', 'w') as yml:
...: yaml.dump(data, yml, allow_unicode=True)
...:
In [4]: ! cat test.yaml
{!!python/unicode 'description': 今日は雨が降って, !!python/unicode 'title': 今日は雨が降って}
In [5]: with open('test.yaml', 'w') as yml:
...: yaml.safe_dump(data, yml, allow_unicode=True)
...:
In [6]: ! cat test.yaml
{description: 今日は雨が降って, title: 今日は雨が降って}
C'est correct. Les chaînes "\ u ...." sont une représentation unicode de votre japonais? chaîne. Lorsque vous le décodez et l'utilisez avec un encodage approprié, il devrait s'afficher correctement où que vous l'utilisiez. par exemple une page Web.
Voir l'égalité des données malgré une représentation différente sous forme de chaîne:
>>> import json
>>> j = '{ "main": { "title": "今日は雨が降って", "description": "今日は雨が降って" }}'
>>> s = json.loads(j)
>>> t = json.dumps(s)
>>> j
'{ "main": { "title": "\xe4\xbb\x8a\xe6\x97\xa5\xe3\x81\xaf\xe9\x9b\xa8\xe3\x81\x8c\xe9\x99\x8d\xe3\x81\xa3\xe3\x81\xa6", "description": "\xe4\xbb\x8a\xe6\x97\xa5\xe3\x81\xaf\xe9\x9b\xa8\xe3\x81\x8c\xe9\x99\x8d\xe3\x81\xa3\xe3\x81\xa6" }}'
>>> t
'{"main": {"description": "\\u4eca\\u65e5\\u306f\\u96e8\\u304c\\u964d\\u3063\\u3066", "title": "\\u4eca\\u65e5\\u306f\\u96e8\\u304c\\u964d\\u3063\\u3066"}}'
>>> s == json.loads(t)
True