做的功能类似这个网站
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)
- 其中的第一行是python把字典转换成json字符串
- json.loads是将json字符串转化为dict字典
- json.dumps是将dict转换为json字符串。
- 这时j就已经没有其他污染符号了。最后一步就是把json转换为dict,因为写入yaml文件要用字典格式。
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
网友评论