做一个的json转换为yaml网页

2017-09-16  本文已影响825人  c4a1d989518e

做的功能类似这个网站
http://www.awesometool.org/Encode/YAML2JSON
我的是写成成yaml格式的文件。
做这个功能,当初的需求是这样:之前我把用例用json文件保存,但是后来,我在Django中更改json数据,然后在写回json文件,发现原来的格式就会消失,变成dict格式,非常不利用阅读。后来发现了yaml格式,发现yaml格式是现在比较流行的用来写配置文件或者用例的格式。而且写起来非常利于阅读。关于yaml格式,可以看阮一峰的博客YAML 语言教程

原本以为比较简单,等到做的时候,踩了一些坑。记录一下这些坑。

1.如何去除制表符,换行符\n\t\t\t等等

如果我在前端网页的输入框中输入json格式的额数据,如:



    { "people": [

    { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },

    { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},

    { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }

    ]}

我用Django通过request.POST[]读取过来后,发现打印出来是包含各种换行符和制表符的,如\n\t\t\t\t,这样的数据根本就没法用,我最开始考虑的是否是前端输入框的问题,找了半天,没找到好的解决方案。后来又转头去思考用replace和strip()方法来去除这些符号。发现即使转换为str类型后,这两个方法也没有效果。后来我想起来我之前修改json文件,然后写入后,会自动转换为没有符号的dict类型。这不正是我要的?重要思考来源
https://stackoverflow.com/questions/15941996/dump-json-into-yaml

解决方法
d=json.JSONEncoder().encode(incase)
f=json.loads(d)                                                                                      
j=json.dumps(f)                                                                                                 
h=json.loads(j)

incase是我从网页读取的json数据,有一个重要的知识点是json中的数据与dict字典中数据一个重要的不同点是,json中的数据是用双引号的。单引号转双引号的代码为

dict = {'as': 'df', 'zx': 'cv'}
dict = str(dict).replace('\'','\"')

其实,这行代码用不到。

2.写入yaml文件,并用yaml格式。

如果直接用

yaml.dump(dict , f.yaml)

这时写入yaml文件,查看格式,并不是yaml格式,还是挤在一起的dict。

解决方法

这时就要用这个写法

yaml.dump(dict , f.yaml ,default_flow_style=False)

3.错误!!python/unicode

如果用dump那样写在yaml文件,查看写入,就会有这个报错写入yaml文件

解决方法

yaml.dump() 换为yaml.safe_dump

上一篇 下一篇

猜你喜欢

热点阅读