簡體   English   中英

將 json 轉儲到 yaml

[英]dump json into yaml

["

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

pyyaml.dump()有一個allow_unicode選項,默認為None (輸出中的所有非 ASCII 字符都被轉義)。 如果allow_unicode=True ,那么它會寫入原始 Unicode 字符串。

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

獎金

您可以轉儲不帶編碼的 JSON,如下所示:

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

這對我有用:

#!/usr/bin/env python

import sys
import json
import yaml

print(yaml.dump(json.load(open(sys.argv[1])), default_flow_style=False))

所以我們正在做的是:

  1. 通過 json.loads 加載 json 文件
  2. json 以 unicode 格式加載 - 通過 json.dump 將其轉換為字符串
  3. 通過 yaml.load 加載 yaml
  4. 通過 yaml.dump 在文件中轉儲相同的內容 - default_flow_style - True 內聯顯示數據,False 不內聯 - 因此您已准備好可轉儲數據。

根據如何從 JSON 中獲取字符串對象而不是 Unicode 來處理 unicode?

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

>>> 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

我做的很簡單:

#!/usr/bin/env python
import sys
import json
import yaml

yaml.safe_dump(json.load(sys.stdin), sys.stdout, default_flow_style=False)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM