将json转入yaml

hol*_*lys 12 python encoding json yaml

我有一个这样的.json文件(命名为meta.json):

{
    "main": {
        "title": "????????",
        "description": "????????"
    }
}
Run Code Online (Sandbox Code Playgroud)

我想将它转换为一个.yaml 文件(命名为meta.yaml),如:

title: "????????"
description: "????????"
Run Code Online (Sandbox Code Playgroud)

我所做的是:

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     
Run Code Online (Sandbox Code Playgroud)

但遗憾的是,我得到的是:

{description: "\u4ECA\u65E5\u306F\u96E8\u304C\u964D\u3063\u3066", title: "\u4ECA\u65E5\
\u306F\u96E8\u304C\u964D\u3063"}
Run Code Online (Sandbox Code Playgroud)

为什么?

sho*_*oma 18

pyyaml.dump()具有"allow_unicode"选项,默认为None,输出中的所有非ASCII字符都被转义.如果allow_unicode = True则写入原始unicode字符串.

yaml.dump(data, ff, allow_unicode=True)
Run Code Online (Sandbox Code Playgroud)

奖金

json.dump(data, outfile, ensure_ascii=False)
Run Code Online (Sandbox Code Playgroud)


Sau*_*ani 10

这对我有用:

#!/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)
Run Code Online (Sandbox Code Playgroud)

所以我们正在做的是:

  1. 通过json.loads加载json文件
  2. json以unicode格式加载 - 通过json.dump将其转换为字符串
  3. 通过yaml.load加载yaml
  4. 通过yaml.dump将文件转储到文件中 - default_flow_style - True显示内联数据,False不显示内联 - 因此您已准备好可转储数据.

按照如何在Python中从JSON获取字符串对象而不是Unicode对象来处理unicode?