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 |