Python中JSON与字典的区别及数据转换详解

Finn
Finn
发布时间:2026-10-14 | 2人浏览过
原创

本文详细解析Python中JSON与字典的核心差异,包括引号、布尔值及空值的格式不同。通过具体代码示例演示如何使用json模块进行数据序列化与反序列化,并深入讲解如何自定义编码规则以处理Python自定义对象到JSON格式的转换,适用于需要处理数据交换的开发场景。

JSON基础概念与对象辨析

JSON(JavaScript Object Notation)是一种严格格式的通用数据交换格式,它不支持注释功能。

理解JSON文本与JSON对象的区别至关重要:

  • JSON文本是指符合JSON语法规范的字符串数据。
  • JSON对象则是指存在于内存中的具体对象实例,它包含属性与方法,允许通过对象接口访问内部参数信息。

在Python语境下,通常所指的JSON对象实际上对应的是字典(Dictionary)类型。

Python字典与标准JSON格式在书写规范上存在以下主要差异:

  • Python字典允许使用单引号或双引号包裹字符串键值,而JSON格式强制要求仅使用双引号。
  • Python中布尔值首字母大写为True或False,而JSON格式要求全小写的true或false。
  • Python中表示空值的类型为None,而在JSON格式中对应的关键字为null。

Python字典与JSON格式差异对比

JSON全称为JavaScript Object Notation,即JavaScript对象表示法,是一种轻量级的数据交换文本格式。

它主要用于不同系统间的数据传递与信息存储。

在Python中进行JSON数据转换时,主要涉及以下数据类型映射关系:

数字类型在JSON中对应Python的整型(int)和浮点数(float);字符串类型保持一致;布尔值在JSON中为true/false,对应Python的True/False;数组在JSON中对应Python的列表(list)或元组(tuple);对象在JSON中对应Python的字典(dict);而JSON中的null则对应Python的None。

JSON数据格式与类型映射

常见的JSON数据格式示例如下所示:

{ code: 200, values: [ {"name": 'lal', 'age': 20} ] }

在JSON结构中,花括号{}表示一个JSON对象。

方括号[]表示一个JSON数组。

以下是实现JSON数据转换的具体代码示例:

Python JSON序列化与自定义对象处理代码实现


import json
age = 10
#dumps把数据转化为json语法中的数值数据
json_data = json.dumps(age)
print(json_data)

name = '橙子'
json_dta =json.dumps(name)
print(json_data)

person ={"chinese":99}
json_data =json.dumps(person)
print(json_data)



#在python中可自定义类型 自定义的类型 在json中没有对应的数据格式
#需要制定编码规则 通过编码规则 将自定义类型的数据转换为json可识别的数据
class Person():
  def __init__(self,name):
    self.name = name
  def __str__(self):
    return f"Person(name={self.name})"
  #__repr__通过容器调用对象调用__repr__
  #__str__当打印对象时输出设定的格式信息
  __repr__ =__str__

p = Person("橙子")
print(p)
print(type(p))#<class '__main__.Person'>
#在json中无对应数据

#存储Person类型的数据-需获取json可识别数据格式
#方式1
#对象__dict__获取对象的特征信息以字典形式存储
json_data = json.dumps(p.__dict__)
print(json_data)#{"name": "\u6a59\u5b50"}
#本质上存储的是字典

#loads解析为json数据
python_data =json.loads(json_data)
print(python_data)

#对应对象为Person对象 需要根据数据信息创建对象
p = Person(python_data["name"])
print(p,type(p))#Person(name=橙子) <class '__main__.Person'>

#方法二存储时设置编码规则 存的是指定的编码规则数据
#获取的时候要对应有一个解码规则 在根据数据解析成对象
#对以上操作封装
#PersonEncoder编码
class PersonEncoder(json.JSONEncoder):
  #重写方法
  #这个方法在dumps时 内部自动调用
  #子类重写父类的方法 子类对党调用时 只能调用重写 因为会吧父类方法覆盖
  def default(self, o):
    #把规则写出来
    #o 表示要进行json转换的对象
    return o.__dict__
P =Person('橙子2')
#CLS制定编码规则
#对象__dict__获取对象的特征信息以字典形式存储
json_data =json.dumps(P,cls=PersonEncoder)
print(json_data)#{"name": "\u6a59\u5b502"}

#解析JSONDecoder
class PersonDecoder(json.JSONDecoder):
  def __init__(self):
    #指定解码规则
    #object_hook对象挂钩-对象解析-接受的是一个函数
    super().__init__(object_hook=self.to_python_obj)

  def to_python_obj(self,d):
    #d接受的是字典,当前制定的转化为json对象的数据格式
    return Person(d['name'])

#解析操作
python_data =json.loads(json_data,cls=PersonDecoder)
print(python_data)#Person(name=橙子2)

以上即为Python中JSON数据转换的核心内容,希望能为读者的学习提供有效帮助,欢迎持续关注本站获取更多技术更新。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表