首页 > 编程语言 >Python利用jsonpickle库把对象序列化为json

Python利用jsonpickle库把对象序列化为json

时间:2023-06-12 17:44:06浏览次数:48  
标签:city name Python age jsonpickle person json 序列化

python中经常要保存一些数据, json是一种理想的存储格式, 纯文本的, 也方便阅读, 但有时使用起来不太方便, 比如下面的例子:

a = jsonData['A']
b = jsonData['B']

只能按字典方式引用, 还不支持自动完成, 不如python对象使用方便.
如果定义python类, 使用方便, 但是保存为文件时是二进制的, 不方便查看或者被第三方程序使用.
jsonpickle库解决了此问题, 可以把对象序列化为json文本文件, 如下所示:

import jsonpickle

# 定义一个类
class Person:
    def __init__(self, name, age, city):
        self.name = name
        self.age = age
        self.city = city

# 创建一个类的实例
person = Person("Alice", 30, "New York")

# 将类的实例保存为JSON格式,并格式化输出
json_string = jsonpickle.encode(person, indent=4)

# 打印JSON字符串
print(json_string)

打印出来的json字符串如下:

{
    "py/object": "__main__.Person",
    "name": "Alice",
    "age": 30,
    "city": "New York"
}

反序列化代码:

# 将JSON字符串转换为Python对象
person = jsonpickle.decode(json_string)

# 打印类的实例
print(person.name, person.age, person.city)

输出:

Alice 30 New York

一个小经验
如果有多级嵌套的数据, 最好转换为平面的比较好, 这样json文件看起来比较容易理解.
比如一颗树, 可以把树中的每一个节点分配一个唯一ID, 每一个节点只需要存储其子节点和父节点的ID即可.

标签:city,name,Python,age,jsonpickle,person,json,序列化
From: https://www.cnblogs.com/huzhongqiang/p/17475613.html

相关文章

  • os模块、序列化模块、pickle和json的区别
    os模块#os模块是与操作系统交互的一个接口1.文件相关的os.makedirs('dirname1/dirname2')#可生成多层递归目录os.removedirs('dirname1')#若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推os.mkdir('dirname')#生成单级目录;相当于shell中mkd......
  • 【Python入门教程】Python常用表格函数&操作(xlrd、xlwt、openpyxl、xlwings)
    ​        在我们使用Python时,避免不了与Excel打交道。同样Python的三方库和代码的简洁性也为我们处理大数据提供了便利。今天给大家介绍一下常用的处理表格的函数,同时还有一些常用的操作。                这些都是我在使用Python处理Excel时用到的......
  • 0基础学python
    Python学习路线 精品Python学习书籍 技能对照表 ......
  • python 序列化模块
    一、jsonJson模块提供了四个功能:dumps、dump、loads、load1、前景什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化。序列化的目的以某种存储形式使自定义对象持久化;将对象从一个地方传递到另一个地方。使程序更具维护性2、loads和dumps......
  • Delphi 原生支持DataSet导出Json
    Xalion发现data.DBJson单元,不知什么时候加的,官方帮助中也没有写。procedureTForm18.Button2Click(Sender:TObject);varcV:TDatasetToJSONBridge;jo:Tjsonobject;begincV:=TDatasetToJSONBridge.Create;trycV.Dataset:=mt;jo:=Tjsonobject(cV.......
  • 手机在线玩Python的15种方法!
    /手机写代码 /android安卓 QPython.apk链接:https://pan.baidu.com/s/1S2mFHsqa3Zuyxiua6nGsbg 提取码:b1g2  Pydroid.apk链接:https://pan.baidu.com/s/10Bnyl6AdUI2mBRZEuLMB6g 提取码:678f Python教程.apk链接:https://pan.baidu.com/s/1iRJC4mAUTCGBounShuXxdg?pw......
  • python使用HTTP隧道代理代码示例模板
    以下是使用HTTP隧道代理的Python代码示例模板:```pythonimportrequests#设置代理服务器地址和端口号proxy_host="your_proxy_host"proxy_port="your_proxy_port"#设置代理服务器的用户名和密码(如果需要)proxy_username="your_proxy_username"proxy_password="your_proxy_p......
  • python的shell用法
    python的shell用法python[-bBdEhiIOqsSuvVWx?][-ccommand|-mmodule-name|script|-][args]Python-mpython-mmodule名args检索对应的模块名去执行,对于一个普通的模块,可能下面两种写法实际上是等效的:python-mtestpythontest.py两种写法都是将对应的py文......
  • 实验6 turtle绘图与python库应用编程体验
    实验任务1fromturtleimport*defmove(x,y):'''画笔移动到坐标(x,y)处'''penup()goto(x,y)pendown()defdraw(n,size=100):'''绘制边长为size的正n边形'''foriinrange(n):fd(siz......
  • 为什么很多人自学Python都放弃了?
     有些人学Python并不是因为对编程有浓厚的兴趣,或者没有经验尝试认为入门容易。因此,当他们开始学习Python时,可能会遇到一些困难或感到挫败,导致他们放弃。总的来说,python并不是你想想的那样简单。以下是可能导致放弃的原因:缺乏计算机科学和编程基础:学习Python需要具备一定的计......