2013-04-11 121 views
7

我有一個.json文件(將其命名爲meta.json)是這樣的:轉儲JSON轉換成YAML

{ 
    "main": { 
     "title": "今日は雨が降って", 
     "description": "今日は雨が降って" 
    } 
} 

我想將它轉化成一個.yaml文件(meta.yaml把它命名爲),如:

title: "今日は雨が降って" 
description: "今日は雨が降って" 

我所做的是:

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  

但是可悲的是,我得到的是:

{description: "\u4ECA\u65E5\u306F\u96E8\u304C\u964D\u3063\u3066", title: "\u4ECA\u65E5\ 
\u306F\u96E8\u304C\u964D\u3063"} 

爲什麼?

回答

10

pyyaml.dump()有「allow_unicode」選項,它的默認設置爲無, 輸出中的所有非ASCII字符轉義。如果allow_unicode = True,則寫入原始unicode字符串。

yaml.dump(data, ff, allow_unicode=True) 

獎金

json.dump(data, outfile, ensure_ascii=False) 
+0

yaml.dump(數據,FF,allow_unicode =真)的作品!非常感謝! – holys 2013-04-11 06:54:03

2

這是正確的。 「\ u ....」字符串是您的日語的unicode表示形式嗎?串。當你使用正確的編碼進行解碼和使用時,無論你在哪裏使用它,它都應該顯示得很好。例如網頁。

見不同的表示的數據inspite作爲字符串平等:

>>> 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 
1
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: 今日は雨が降って} 
-4

您可以執行JSON,YAML(和XML)之間的轉換這裏 http://demono.ru/online-SDConverter/onlinePage.aspx

+0

請注意,[只有鏈接回答](http://meta.stackoverflow.com/tags/link-only-answers/info)不鼓勵,所以答案應該是搜索解決方案的終點(vs.而另一個引用的中途停留時間往往會隨着時間推移而過時)。請考慮在此添加獨立的摘要,並將鏈接保留爲參考。 – kleopatra 2013-09-07 10:20:59

+0

作爲問題顯然標記爲'python',應該通過代碼解決方案來回答,而不是一些在線工具。因此我不得不倒退它。 – mastier 2017-05-15 15:40:06

6

這個工作對我來說:

#!/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) 

所以我們正在做的是:通過json.loads

  • JSON負載Unicode格式

    1. 負荷JSON文件 - 將其轉換成字符串的那樣json.dump
    2. 負荷YAML通過yaml.load
    3. 通過yaml.dump轉儲文件中的相同內容 - default_flow_style - True顯示數據內聯,False不執行內聯 - 因此您已準備好可以抽取的數據。

    照顧統一的按How to get string objects instead of Unicode ones from JSON in Python?