python JSON操作 作者:马育民 • 2019-05-24 09:34 • 阅读:10200 # 概述 本文讲解python操作JSON 关于JSON,参见链接: https://www.malaoshi.top/show_1EF2cBZyuggx.html python 基本数据类型向 json 类型的转化对照表: |Python |JSON | | ------------ | ------------ | |dict |object | |list, tuple |array | |str |string | |int, float |number | |True |true | |False |false | |None |null | # 导包 导包后才能使用 ``` import json ``` # 将对象编码成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) ``` ##### 参数: - obj:要转换的python对象 - encoding: 默认是UTF-8,设置json数据的编码方式。 >如果读取编码是gbk的文本文件,并处理字符串生成json时,此处应该设置为gbk - ensure_ascii: 默认值True,如果dict内含有non-ASCII的字符,则会类似\uXXXX的显示数据,设置成False后,就能正常显示 - skipkeys: 默认值是False。如果obj是dict类型,当key不是str,int,float,bool,None时,就会报TypeError的错误,如下: ``` s=json.dumps({(1,2):'李雷'}) print(type(s),s) ``` 如果设置成True,则会跳过这类key,如下代码: ``` s=json.dumps({(1,2):'李雷'},skipkeys=True) print(type(s),s) ``` - indent: 应该是一个非负的整型,如果是0,或者为空,则一行显示数据,否则会换行且按照indent的数量显示前面的空白,这样打印出来的json数据也叫pretty-printed json - separators: 分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(',',':');这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。 - sort_keys: 将数据根据keys的值进行排序。 ### 例子 ``` s=json.dumps({'name':'李雷','age':20,'isStudent':True,'like':['王者荣耀','吃鸡']},ensure_ascii=False) print(type(s),s) ``` ### 将对象编码成JSON字符串,并写入文件 ##### 语法 ``` json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw) ``` ##### 参数: 大部分参数与json.dumps()相同 - fp:要写入的文件对象 ### 例子 ``` f=open('json.txt','w') json.dump({'name':'李雷','age':20,'isStudent':True,'like':['王者荣耀','吃鸡']},f,ensure_ascii=False) f.close() ``` # 将JSON字符串解码为对象 ##### 语法: ``` json.loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) ``` ##### 参数: - s:JSON格式的字符串 - encoding:编码 ### 例子 ``` s='{"name": "李雷", "age": 20, "isStudent": true, "like": ["王者荣耀", "吃鸡"]}' o=json.loads(s) print(type(o),o) ``` ### 读取文件并解码为对象 ##### 语法 ``` json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) ``` ##### 参数: 大部分参数与json.loads()相同 - fp:要读取的文件对象 ### 例子 ``` f=open('json.txt','r') o=json.load(f) print(type(o),o) ``` 原文出处:http://malaoshi.top/show_1EF3O5MTVt5d.html