所使用的python版本为:3.7
python | json |
---|---|
dict | object |
list,tuple | array |
str,unicode | string |
int,long,float | number |
True | true |
False | false |
None | null |
json | python |
---|---|
boject | dict |
string | unicode |
number(int) | int,long |
number(real) | float |
true | True |
false | False |
null | None |
函数 | 作用 |
---|---|
json.dump | 将dict转换为str写入文件 |
json.dumps | 将 Python 对象编码成 JSON 字符串 |
json.load | 将json文件读出到内存,并转换为python的标准词典类型 |
json.loads | 将已编码的 JSON 字符串解码为 Python 对象 |
数据为省份证号前六位所代表的省市地区(以北京市为例),包含中文格式。
data = {‘110000’: {‘addressID’: ‘110000’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘北京市’,
‘RegionName’: ‘华北地区’},
‘110100’: {‘addressID’: ‘110100’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘市辖区’,
‘RegionName’: ‘华北地区’},
‘110101’: {‘addressID’: ‘110101’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘东城区’,
‘RegionName’: ‘华北地区’},
‘110102’: {‘addressID’: ‘110102’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘西城区’,
‘RegionName’: ‘华北地区’},
‘110105’: {‘addressID’: ‘110105’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘朝阳区’,
‘RegionName’: ‘华北地区’},
‘110106’: {‘addressID’: ‘110106’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘丰台区’,
‘RegionName’: ‘华北地区’},
‘110107’: {‘addressID’: ‘110107’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘石景山区’,
‘RegionName’: ‘华北地区’},
‘110108’: {‘addressID’: ‘110108’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘海淀区’,
‘RegionName’: ‘华北地区’},
‘110109’: {‘addressID’: ‘110109’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘门头沟区’,
‘RegionName’: ‘华北地区’},
‘110111’: {‘addressID’: ‘110111’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘房山区’,
‘RegionName’: ‘华北地区’},
‘110112’: {‘addressID’: ‘110112’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘通州区’,
‘RegionName’: ‘华北地区’},
‘110113’: {‘addressID’: ‘110113’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘顺义区’,
‘RegionName’: ‘华北地区’},
‘110114’: {‘addressID’: ‘110114’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘昌平区’,
‘RegionName’: ‘华北地区’},
‘110115’: {‘addressID’: ‘110115’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘大兴区’,
‘RegionName’: ‘华北地区’},
‘110116’: {‘addressID’: ‘110116’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘怀柔区’,
‘RegionName’: ‘华北地区’},
‘110117’: {‘addressID’: ‘110117’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘平谷区’,
‘RegionName’: ‘华北地区’},
‘110200’: {‘addressID’: ‘110200’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘县’,
‘RegionName’: ‘华北地区’},
‘110228’: {‘addressID’: ‘110228’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘密云县’,
‘RegionName’: ‘华北地区’},
‘110229’: {‘addressID’: ‘110229’, ‘ProvinceID’: ‘11’, ‘ProvinceName’: ‘北京市’, ‘townName’: ‘延庆县’,
‘RegionName’: ‘华北地区’}}
(1)默认参数
默认情况下使用的参数:json.dumps(data)
相当于指定参数:json.dumps(data,skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False)
参数 | 功能 |
---|---|
data | 原始dict数据 |
skipkeys | 如果“skipkeys”为真,那么“dict”键的非基本类型(‘str’,‘int’,‘ float’,‘ bool’,‘None’)将被跳过,而不是引发“ TypeError ”。 |
ensure_ascii | 如果"ensure_ascii "为false,那么返回值可以包含非ascii字符(如果它们出现在"obj"中包含的字符串中)。否则,所有这些字符都在JSON字符串中转义。 |
check_circular | 如果"check_circular"为false,那么容器类型的循环引用检查将被跳过,循环引用将导致"OverflowError "(或者worse)。 |
allow_nan | 如果"allow_nan"为false,那么它将是一个"ValueError"’,用于序列化超出范围的’float ‘值(‘nan’,‘inf’,’-inf’),严格遵守JSON规范,而不是使用JavaScript等价的值(’ nan’, ’ Infinity’, ‘-Infinity’)。 |
indent | 如果" indent"是一个非负整数,那么JSON数组元素和对象成员将使用该缩进级别进行漂亮的打印。缩进级别0只会插入新行。‘None’是最紧凑的表达。 |
separators | separators分隔符,默认是(’,’, ‘:’),字典之间用“,”隔开,而key和value之间用“:”隔开 |
sort_keys | 如果"sort_keys"为真(默认值:" False"),那么字典的输出将按键排序。 |
(2) 常用参数
(2.1)解决中文问题:ensure_ascii
默认为真,中文会以Unicode编码输出:
改为False,不使用ascii码
默认情况:indent为None,一般情况下,选用缩进四个字符即indent=4
功能:将dict转换为str写入文件
with open("bj.json","w",encoding="utf-8")as f:
json.dump(data,f,ensure_ascii=False,indent=4)
等效于
with open("bj.json","w",encoding="utf-8")as f:
f.writelines(json.dumps(data,ensure_ascii=False,indent=4))
功能:json.load()用于从json文件中读取数据
data = json.load(open("bj.json",encoding="utf-8"))
print(data)
data = json.dumps(data, ensure_ascii=False,indent=4)
print(data)
功能:json.loads()用于将str类型的数据转成dict。
data = json.load(open("bj.json",encoding="utf-8"))
print(data)
print(type(data))
data = json.dumps(data, ensure_ascii=False,indent=4)
print(data)
print(type(data))
data = json.loads(data,encoding="utf-8")
print(data)
print(type(data))