Json函数:
json.dumps: Python标准库中的json模块,集成了将数据序列化处理的功能. 将 Python 对象编码成 JSON 字符串
语法:
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
常用参数演示:
1 #!/usr/bin/python 2 import json 3 4 jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; 5 6 text = json.loads(jsonData) 7 print text
运行结果:
{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}
这样的格式一般都不优美,当数据很多的时候,看得就不是很直观方便,现在用一个参数来对json进行数据格式化输出
>>> import json >>> print json.dumps({'a': 'Runoob', 'b': 7}, sort_keys=True, indent=4, separators=(',', ': ')) { "a": "Runoob", "b": 7 }
python 默认支持的数据类型向 json 类型的转化对照表:
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str, unicode | string |
int, long, float | number |
True | true |
False | false |
None | null |
如果序列化的目标数据中存在序列化不支持的数据类型,如decimal.Decimal或者datetime数据类型时,会抛异常TypeError: *** is not JSON serializable,可以通过自定义处理来扩展
1 import json 2 from decimal import Decimal 3 4 chart_list ={'state': {'desired': {'working_status': 'on', 'color_blue_value': Decimal('255'), 'color_green_value': Decimal('255'), 'color_red_value': Decimal('255')}}} 5 6 class DecimalEncoder(json.JSONEncoder): 7 8 def default(self, n): 9 if isinstance(n, Decimal): 10 return int(n) 11 #super(DecimalEncoder, self).default(n) 12 13 str = json.dumps(chart_list, cls=DecimalEncoder) 14 print(str) >>> {"state": {"desired": {"working_status": "on", "color_blue_value": 255, "color_green_value": 255, "color_red_value": 255}}}
1 import json 2 from datetime import date 3 from datetime import datetime 4 5 6 class JsonCustomEncoder(json.JSONEncoder): 7 8 def default(self, obj): 9 if isinstance(obj, datetime): 10 return obj.strftime('%Y-%m-%d %H:%M:%S') 11 elif isinstance(obj, date): 12 return obj.strftime('%Y-%m-%d') 13 else: 14 return json.JSONEncoder.default(self, obj) 15 16 # ds = json.dumps(d, cls=JsonCustomEncoder)
json.loads: 将已编码的 JSON 字符串解码为 Python 对象
json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
代码演示:
1 #!/usr/bin/python 2 import json 3 4 jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; 5 6 text = json.loads(jsonData) 7 print text
运行结果:
{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}
json 类型转换到 python 的类型对照表:
JSON | Python |
---|---|
object | dict |
array | list |
string | unicode |
number (int) | int, long |
number (real) | float |
true | True |
false | False |
null | None |