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

0x00 python 版本

所使用的python版本为:3.7

0x01 python 与 json

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

pythonjson
dictobject
list,tuplearray
str,unicodestring
int,long,floatnumber
Truetrue
Falsefalse
Nonenull

2、json类型转换到python类型

jsonpython
bojectdict
stringunicode
number(int)int,long
number(real)float
trueTrue
falseFalse
nullNone

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’是最紧凑的表达。
separatorsseparators分隔符,默认是(’,’, ‘:’),字典之间用“,”隔开,而key和value之间用“:”隔开
sort_keys如果"sort_keys"为真(默认值:" False"),那么字典的输出将按键排序。

(2) 常用参数

(2.1)解决中文问题:ensure_ascii

默认为真,中文会以Unicode编码输出:
在这里插入图片描述
改为False,不使用ascii码

在这里插入图片描述
(2.2)缩进问题:indent

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

在这里插入图片描述

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))

在这里插入图片描述

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
在这里插入图片描述

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值