python 处理json文件及中文文字处理问题

python 处理json文件及中文文字处理问题

  • 0x00 python 版本
  • 0x01 python 与 json
    • 1、python原始类型向json类型转换
    • 2、json类型转换到python类型
  • 0x02 json函数
  • 0x03 使用实例
    • 1、josn.dumps()
    • 2、josn.dump()
    • 3、josn.load()
    • 4、josn.loads()

0x00 python 版本

所使用的python版本为:3.7

0x01 python 与 json

1、python原始类型向json类型转换

python json
dict object
list,tuple array
str,unicode string
int,long,float number
True true
False false
None null

2、json类型转换到python类型

json python
boject dict
string unicode
number(int) int,long
number(real) float
true True
false False
null None

0x02 json函数

函数 作用
json.dump 将dict转换为str写入文件
json.dumps 将 Python 对象编码成 JSON 字符串
json.load 将json文件读出到内存,并转换为python的标准词典类型
json.loads 将已编码的 JSON 字符串解码为 Python 对象

0x03 使用实例

数据为省份证号前六位所代表的省市地区(以北京市为例),包含中文格式。

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、josn.dumps()

(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编码输出:
python 处理json文件及中文文字处理问题_第1张图片
改为False,不使用ascii码

python 处理json文件及中文文字处理问题_第2张图片
(2.2)缩进问题:indent

默认情况:indent为None,一般情况下,选用缩进四个字符即indent=4

python 处理json文件及中文文字处理问题_第3张图片

2、josn.dump()

功能:将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))

python 处理json文件及中文文字处理问题_第4张图片

3、josn.load()

功能: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)

在这里插入图片描述

4、josn.loads()

功能: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))

dict -> str -> dict
python 处理json文件及中文文字处理问题_第5张图片

你可能感兴趣的:(python)