如何将json数据转换为python数据
JSON对象是javascriptobject即javascript中的对象,是一种通用的格式,格式严格,不支持备注。
JSON文本和JSON对象的区别:
- JSON文本是符合JSON格式的文本,实际上是一个字符串
- JSON对象是内存中一个对象,拥有属性和方法,可以通过对象获取其中的参数信息
Python中我们一般提到JSON对象指的是字典
Python的字典的格式和JSON格式,稍有不同:
- 字典中的引号支持单引号和双引号,JSON格式只支持双引号
- 字典中的True/False首字母大写,JSON格式为true/false
- 字典中的空值为None,JSON格式为null
json是数据存储和交换文本信息的语法
javaScript对象表示法
用于数据传递
json中的数据格式python中的数据
数字整型浮点数
字符串字符串
布尔值truefalseTrueFalse
数组列表。元祖
对象字典
nullNone
常见的json数据格式
{
code:200,
values:[
{"name":'lal','age':20}]
}
{}josn数据对应json对象
[]josn数组
代码如下
importjson
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可识别的数据
classPerson():
def__init__(self,name):
self.name=name
def__str__(self):
returnf"Person(name={self.name})"
#__repr__通过容器调用对象调用__repr__
#__str__当打印对象时输出设定的格式信息
__repr__=__str__
p=Person("橙子")
print(p)
print(type(p))#
#在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=橙子)
#方法二存储时设置编码规则存的是指定的编码规则数据
#获取的时候要对应有一个解码规则在根据数据解析成对象
#对以上操作封装
#PersonEncoder编码
classPersonEncoder(json.JSONEncoder):
#重写方法
#这个方法在dumps时内部自动调用
#子类重写父类的方法子类对党调用时只能调用重写因为会吧父类方法覆盖
defdefault(self,o):
#把规则写出来
#o表示要进行json转换的对象
returno.__dict__
P=Person('橙子2')
#CLS制定编码规则
#对象__dict__获取对象的特征信息以字典形式存储
json_data=json.dumps(P,cls=PersonEncoder)
print(json_data)#{"name":"\u6a59\u5b502"}
#解析JSONDecoder
classPersonDecoder(json.JSONDecoder):
def__init__(self):
#指定解码规则
#object_hook对象挂钩-对象解析-接受的是一个函数
super().__init__(object_hook=self.to_python_obj)
defto_python_obj(self,d):
#d接受的是字典,当前制定的转化为json对象的数据格式
returnPerson(d['name'])
#解析操作
python_data=json.loads(json_data,cls=PersonDecoder)
print(python_data)#Person(name=橙子2)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。