程序笔记   发布时间:2022-07-18  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Python json文件读写大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

JSON (JavaScript Object Notation)是一个受 JavaScript 的对象字面量语法启发的轻量级数据交换格式,本文介绍Python json库的使用,也就是json的序列化和反序列化方法。

目录
  • json序列化
    • dump
    • dumps
    • 将类实例转化成json字符串
  • json反序列化
    • load
    • loads
    • JSON反序列化类对象

json序列化

dump

写入到文件,将对象转换为json字符串格式,这样更容易存储。

import json
data = {'numbers':1, 'Strings':"value", 'Arrays':[1,2,3], 'Dicts':{'1':1,'2':2}}
with open("data1.json", "w", encoding="utf-8") as f:
    json.dump(data, f, sort_keys=True, indent=4)

Python json文件读写

dumps

将对象转换为String,这样更容易传输

data2 = {'numbers':1, 'Strings':"value", 'Arrays':[1,2,3]}
data = json.dumps(data2, sort_keys=True, indent=4)
print(data)
print(type(data))

执行结果:

{
    "Arrays": [
        1,
        2,
        3
    ],
    "numbers": 1,
    "Strings": "value"
}
<class 'str'>

将类实例转化成json字符串

也可以将类实例转化成json字符串,需要先将实例转化为可序列化操作的对象。下面介绍3种方案:

  1. 获取实例的__Dict__成员变量
  2. 使用Python内置函数vars()获取__Dict__
  3. 类继承JSONEncoder,自定义JSONEncoder.default()函数
class JsonClassserializable(json.JSONEncoder):
    """JSON serializer for objects"""
    def default(self, obj):
        if isinstance(obj, Person):
            return obj.__Dict__
        else:
            return json.JSONEncoder.default(self, obj)    

class Person():
  def __init__(self, name, height):
    self.name = name
    self.height = height
    
p = Person("zhangsan",175)
print(p.__Dict__)
data1 = json.dumps(p.__Dict__, sort_keys=True, indent=4)
print(data1)
data2 = json.dumps(vars(p), sort_keys=True, indent=4)
print(data2)
data3 = json.dumps(p, default=lambda x: x.__Dict__, sort_keys=True, indent=4)
print(data3)
data4 = json.dumps(p, cls=JsonClassserializable, sort_keys=True, indent=4)
print(data4)

执行结果:

{'name': 'zhangsan', 'height': 175}
{
    "height": 175,
    "name": "zhangsan"
}
{
    "height": 175,
    "name": "zhangsan"
}
{
    "height": 175,
    "name": "zhangsan"
}
{
    "height": 175,
    "name": "zhangsan"
}

json反序列化

json反序列化是将json数据或者字符串转化为Python对象,对应load和loads两个方法:

  • load:针对文件句柄,用于读取文件
  • loads:针对内存对象,将String转换为对象

load

with open("data1.json", "r", encoding="utf-8") as f:
    data = json.load(f)
    print(data)
    print(type(data))
    print(type(data['Arrays']))

执行结果:

{'Arrays': [1, 2, 3], 'numbers': 1, 'Objects': {'1': 1, '2': 2}, 'Strings': 'value'}
<class 'Dict'>
<class 'list'>

loads

datas = '{"numbers":1, "Strings":"value", "Arrays":[1,2,3]}'
data = json.loads(datas)
print(data)
print(type(data))

执行结果:

{'numbers': 1, 'Strings': 'value', 'Arrays': [1, 2, 3]}
<class 'Dict'>

JSON反序列化类对象

class Person():
    def __init__(self, d):
        self.__Dict__ = d
    def introduce(self):
        print(f"My name is {self.namE}")

data = '{"name": "zhangsan", "height": 175}' 
p = json.loads(data, object_hook=Person)
print(p)
print(p.Name)
print(p.height)
p.introduce()

执行结果:

<__main__.Person object at 0x000001FA98439748>
zhangsan
175
My name is zhangsan

文档

  1. https://docs.python.org/zh-cn/3.9/library/json.html
--THE END--

大佬总结

以上是大佬教程为你收集整理的Python json文件读写全部内容,希望文章能够帮你解决Python json文件读写所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。