python操作字符串类型json的注意点
2016-03-02 10:21
483 查看
python操作json的方法有
json.dumps——将json对象(字典)转换为字符串对象
json.loads——将字符串对象转换为json对象(字典)
如果定义json对象
jsonstring1={"results":[{"id":"1","name":"\u9ed8\u8ba4\u5206\u7ec4","policy":"4","timer_scan_setting":"{\"last\":\"10.29.13\",\"setting\":\"fulldisk\",\"type\":\"day\",\"hour\":\"13\"}"},
{"id":"2","name":"\u6d4b\u8bd5\u7684","policy":"1","timer_scan_setting":"{\"last\":\"10.29.15\",\"setting\":\"fulldisk\",\"type\":\"day\",\"hour\":\"15\"}"},{"id":"4","name":"\u4ea7\u54c1\u7ec4","policy":"3","timer_scan_setting":"{\"last\":\"10.8.15\",\"setting\":\"disable\"}"}]}
可以直接按json操作,比如
print jsonstring1.keys()
print jsonstring1['results'][0]['policy']
也可以转个360度再操作
jsonstring1=json.dumps(jsonstring1)
jsonstring1=json.loads(jsonstring1)
print jsonstring1.keys()
print jsonstring1['results'][0]['policy']
但是如果定义字符串对象就要小心了
jsonstring2='''{"results":[{"id":"1","name":"\u9ed8\u8ba4\u5206\u7ec4","policy":"4","timer_scan_setting":"{\"last\":\"10.29.13\",\"setting\":\"fulldisk\",\"type\":\"day\",\"hour\":\"13\"}"},
{"id":"2","name":"\u6d4b\u8bd5\u7684","policy":"1","timer_scan_setting":"{\"last\":\"10.29.15\",\"setting\":\"fulldisk\",\"type\":\"day\",\"hour\":\"15\"}"},{"id":"4","name":"\u4ea7\u54c1\u7ec4","policy":"3","timer_scan_setting":"{\"last\":\"10.8.15\",\"setting\":\"disable\"}"}]}'''
这个只是对上面的json对象加了三引号转为一个字符串,所以理论上可以直接loads之后就按json操作
json.loads(jsonstring2)
但是实际却报错了,原因是因为大括号前后的双引号没有去掉,网上很多在线的json格式化工具对于这些双引号不会报错,但是python会,而定义json对象时加了双引号操作却没报错,是因为不加里面的内容会被转义,所以千万不能完全相信网上的json格式校验工具。
json.dumps——将json对象(字典)转换为字符串对象
json.loads——将字符串对象转换为json对象(字典)
如果定义json对象
jsonstring1={"results":[{"id":"1","name":"\u9ed8\u8ba4\u5206\u7ec4","policy":"4","timer_scan_setting":"{\"last\":\"10.29.13\",\"setting\":\"fulldisk\",\"type\":\"day\",\"hour\":\"13\"}"},
{"id":"2","name":"\u6d4b\u8bd5\u7684","policy":"1","timer_scan_setting":"{\"last\":\"10.29.15\",\"setting\":\"fulldisk\",\"type\":\"day\",\"hour\":\"15\"}"},{"id":"4","name":"\u4ea7\u54c1\u7ec4","policy":"3","timer_scan_setting":"{\"last\":\"10.8.15\",\"setting\":\"disable\"}"}]}
可以直接按json操作,比如
print jsonstring1.keys()
print jsonstring1['results'][0]['policy']
也可以转个360度再操作
jsonstring1=json.dumps(jsonstring1)
jsonstring1=json.loads(jsonstring1)
print jsonstring1.keys()
print jsonstring1['results'][0]['policy']
但是如果定义字符串对象就要小心了
jsonstring2='''{"results":[{"id":"1","name":"\u9ed8\u8ba4\u5206\u7ec4","policy":"4","timer_scan_setting":"{\"last\":\"10.29.13\",\"setting\":\"fulldisk\",\"type\":\"day\",\"hour\":\"13\"}"},
{"id":"2","name":"\u6d4b\u8bd5\u7684","policy":"1","timer_scan_setting":"{\"last\":\"10.29.15\",\"setting\":\"fulldisk\",\"type\":\"day\",\"hour\":\"15\"}"},{"id":"4","name":"\u4ea7\u54c1\u7ec4","policy":"3","timer_scan_setting":"{\"last\":\"10.8.15\",\"setting\":\"disable\"}"}]}'''
这个只是对上面的json对象加了三引号转为一个字符串,所以理论上可以直接loads之后就按json操作
json.loads(jsonstring2)
但是实际却报错了,原因是因为大括号前后的双引号没有去掉,网上很多在线的json格式化工具对于这些双引号不会报错,但是python会,而定义json对象时加了双引号操作却没报错,是因为不加里面的内容会被转义,所以千万不能完全相信网上的json格式校验工具。
相关文章推荐
- 实例讲解Python设计模式编程之工厂方法模式的使用
- python implement queue
- Python 线程同步
- python queue
- mac下为python安装MySQLdb
- python文件读写编码
- 详解设计模式中的工厂方法模式在Python程序中的运用
- 新建从网页拷贝代码的python文件保存不了的解决方案
- python的【字典dict】:创建、访问、更新、删除;查看键、值、键值对;遍历;排序
- Python:You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit byt
- 【python】Beautiful Soup的使用
- Learning Apriori Algorithm - in Python
- 介绍一个python的新的web framework——karloop框架
- 5.7 Python API(for Elasticsearch)
- eventlet引发的学习:python GIL
- 详解设计模式中的工厂方法模式在Python程序中的运用
- 实例讲解Python设计模式编程之工厂方法模式的使用
- 举例讲解Python设计模式编程中对抽象工厂模式的运用
- 深入解析Python设计模式编程中建造者模式的使用
- 设计模式中的原型模式在Python程序中的应用示例