json模块简析

使用json模块处理json数据首先要先导入。

import json

1,它是处理字典与json字符串之间的转换问题,字典是一种数据结构,他有很多方法可供调用,而json只是一种特定格式的数据,json字符串是符合json格式的字符串。

字典里key和value的值的类型可以是任何类型,一般使用单引号,但不强制比如以下字典的定义:

dic1 = {'str1':'hello world!', 1:5, 't1':(1,2,3), 'l1':[1,2,3], 'sub_dic':{'sub_str':'abcdef', 'sub_list':[1,2]}}

但是json必须使用双引号定义,且key必须有双引号,以上字典转换为json字符串为:

json1 = json.dumps(dic1,ensure_ascii=False,indent=4)
print(json1)
print(type(json1))

运行结果:

{
    "1": 5,
    "t1": [
        1,
        2,
        3
    ],
    "str1": "hello world!",
    "l1": [
        1,
        2,
        3
    ],
    "sub_dic": {
        "sub_str": "abcdef",
        "sub_list": [
            1,
            2
        ]
    }
}
<class 'str'>

可见所有的单引号变为双引号,key都被双引号括住,整个json字符串的格式其实就是字符串。

再将上面的字符串转换为dict:

dic2 = json.loads(json1)
print(dic2)
print(type(dic2))

运行结果:

{'l1': [1, 2, 3], 'str1': 'hello world!', 'sub_dic': {'sub_list': [1, 2], 'sub_str': 'abcdef'}, 't1': [1, 2, 3], '1': 5}
<class 'dict'>

从json字符串转化为字典,格式上看可以看到只是双引号变成了单引号,没有其他变化。

2,如果是往文件内写入字典类型的数据或者从文件内读取出字典数据就要用到dump和load。

文件里存储的数据为json格式的字符串,读出后转化为字典:

with open('user.json', 'a+', encoding='utf-8') as f:
    f.seek(0)        #a+模式下打开文件,文件指针在最后,读取时需要放到最前面
    users = json.load(f)        #读取文件内容,且同时转换为字典
    print(users)
    print(type(users))

运行结果:

{'xiaoma': {'addr': '北京', 'password': 12345, 'age': 18, 'sex': '男'}, 'xiaohei': {'addr': '北京', 'password': 12345, 'age': 18, 'sex': '男'}, 'xiaowang': {'addr': '北京', 'password': 12345, 'age': 18, 'sex': '男'}}
<class 'dict'>

下面说下写入字典数据:
将上述定义的dic1 = {'str1':'hello world!', 1:5, 't1':(1,2,3), 'l1':[1,2,3], 'sub_dic':{'sub_str':'abcdef', 'sub_list':[1,2]}}写入文件user.json里:

with open('user.json', 'a+', encoding='utf-8') as f:
    json.dump(dic1, f, ensure_ascii=False, indent=4)    #dic1为需要写入的字典数据,f是文件对象,有中文需要将ensure_ascii设置为False,indent是缩进格式

执行后可以看到文件内多了新写入的字典数据。

需要注意是,最后文件里包含了两个json字符串,此时再对文件使用load进行读取操作将会报错,文件中只有一个json字符串,无其他多余内容时才可以使用load读取

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值