Python连载三:Json的基本使用

本文探讨了Python中使用JSON进行序列化的优劣,详细介绍了如何将Python对象转换为JSON字符串,以及如何从JSON字符串还原Python对象。文章通过具体示例展示了序列化和反序列化的过程,包括自定义类的序列化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好!前两天学习了序列化,学到了使用Pickle序列化和反序列化,但是Pickle有一个缺陷就是不同的语言不通用,而且不同版本的python解释器也会发生一些错误,只能用于某一个版本,所有使用性不大。
如果我们需要在不同的编程语言之间传递对象,那么我们必须把对象序列化成标准化格式,比如xml,但是更好的方法是json,因为json表现出来就是一个字符串,可以被所有的语言读取,也方便存储到磁盘或者网络传输,json不仅是标准模式,并且速度也比xml更快,还可以在web中读取,非常方便,所以大都会选择Json。
下表为Json在Python和在其他语言中的类型表:
在这里插入图片描述
json可以直接序列化python基本数据类型。

把数据序列化为Json字符串

方法1.json.dumps(obj,default)
注意:若obj为python基本数据类型,我们无需写default,直接进行序列化
若obj为自定义的数据类型,这时候default后面跟的是将对象转为基本数据类型的函数
功能:将obj使用default函数转为字典并且序列化为json字符串,并且返回
方法2.json.dump(obj,f,default)
功能:将obj使用default函数转为python基本数据类型并且序列化为json字符串,
并且写入到指定的打开的f中。

把Json字符串转化为指定类型
json.loads(jsonstr,object_hook)
功能:将jsonstr转为指定类型,通过object_hook的方法将指定类型转为对象

json.load(f,object_hook)
功能:读取打开文件的内容,并且将读取的内容转为python基本数据类型
通过object_hook的方法将python基本数据类型转为对象。

下面看一个例子:

#/usr/bin/env python
#-*- coding: utf-8 -*-
#-*- author: zhaojinmeng -*-
import json

class Person():   #声明一个类,两个属性

    def __init__(self,name,age):
        self.name = name
        self.age = age

def per2dict(per):
    return {"name":per.name,"age":per.age}   # 先把需要写入的数据转为python基本数据模式

def dict2per(pe):
    return Person(pe["name"],pe["age"])   #将字典转为对象的函数

if __name__ == '__main__':

    pers = Person("101110", 110)  		#实例化

    with open("Personss.txt","w",encoding="utf-8") as f:   #打开文件,把数据写入到指定的文件内
        str1 = json.dumps(pers, default=per2dict)  # 1.把需要写入的数据转为json字符串,转化的类型(per2dict)放入dumps里
        f.write(str1)                               #2.写入指定的文件里
        '''
        转为json字符串写入,方法1
        str1 = json.dumps(pers, default=per2dict)
        f.write(str1)
        注意:把数字转为字典的方法需要自己定义,例如我定义的per2dict
        转为json字符串写入,方法2
        json.dump(pers,f,default=per2dict)
        '''
        # json.dump(pers,f,default=per2dict)   # json.dump直接把需要转化的数据(pers),需要写入的文件(f),转化的类型(per2dict)放入dump里。

    with open("Personss.txt","r",encoding="utf-8") as f2: 		#读取指定的Json字符串数据
        srtdic = json.load(f2,object_hook=dict2per)		#使用json.load,f2为打开的文件
        print(srtdic)								#输出的是一个Person对象


运行结果:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值