Python json之load()、loads()、dump()、dumps()

目录

1,json.loads() 与 json.dumps()

2,json.load() 与 json.dump()

3,序列化 与 反序列化 数据类型对照表


参考博客:https://www.cnblogs.com/xiaomingzaixian/p/7286793.html


0,版本:Python3.6

1,json.loads() 与 json.dumps()

简单理解:( 用于数据不同对象间的转换 )
json.loads(s) 将一个JSON格式的字符串对象s,反序列化为Python字典对象;
json.dumps(obj) 将一个Python字典对象obj,序列化为一个JSON格式的字符串对象;

注意,关于:json.dumps()
因为 JSON 中的“键-值对”的键永远是 str 类型。当一个 Python 对象被转化为 JSON 时,字典中所有的键都会被强制转换为 str 类型。因此字典被转换为 JSON 后,再转换回字典时可能和原来的不相等。也就是说,如果 x 具有非字符串的键,则有 loads(dumps(x)) != x。

代码验证:

import json

# test - 1
info = '{"name": "jack", "age": 18}'
json_info = json.loads(info)
print(type(json_info))  # <class 'dict'>

str_info = json.dumps(json_info)
print(type(str_info))  # <class 'str'>

# test - 2
info = {100: 1, 200: 2}
print(json.loads(json.dumps(info)))  # {'100': 1, '200': 2} 键类型发生变化

2,json.load() 与 json.dump()

简单理解:( 用于读写 JSON 文件 )
json.load(fp) 将一个JSON文件反序列化一个Python字典对象;
json.dump(obj, fp) 将obj序列化为JSON文件;

测试用JSON文件:test.json

{
  "cfg": {
    "ip": "192.168.1.120",
    "mask": "255.255.255.0"
  }
}

读取操作:读取 test.json 文件

import json

with open("test.json", "r", encoding="utf-8") as fp:
    json_obj = json.load(fp)
    print(type(json_obj))  # <class 'dict'>
    print(json_obj)  # {'cfg': {'ip': '192.168.1.120', 'mask': '255.255.255.0'}}

写入操作:读取  test.json 后,将 ip 改为:192.168.1.230,并且添加网关:"gateway": "192.168.1.1" 

import json

def json_test():
    json_obj = {}
    with open("test.json", "r", encoding="utf-8") as fp:
        json_obj.clear()
        json_obj = json.load(fp)
        cfg = json_obj.get("cfg")
        cfg["ip"] = "192.168.1.230"
        cfg["gateway"] = "192.168.1.1"

    with open("test.json", "w", encoding="utf-8") as fp:
        json.dump(json_obj, fp, indent=4, ensure_ascii=False)


json_test()


"""
更改后的 test.json 文件:

{
    "cfg": {
        "ip": "192.168.1.230",
        "mask": "255.255.255.0",
        "gateway": "192.168.1.1"
    }
}
"""

3,序列化 与 反序列化 数据类型对照表

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值