JSON对象与Python字典的区别#
JSON对象是javascript object即javascript中的对象,是一种通用的格式,格式严格,不支持备注。
JSON文本和JSON对象的区别:
- JSON文本是符合JSON格式的文本,实际上是一个字符串
- JSON对象是内存中一个对象,拥有属性和方法,可以通过对象获取其中的参数信息
Python中我们一般提到JSON对象指的是字典
Python的字典的格式和JSON格式,稍有不同:
- 字典中的引号支持单引号和双引号,JSON格式只支持双引号
- 字典中的True/False首字母大写,JSON格式为true/false
- 字典中的空值为None, JSON格式为null
'''
json 是数据存储和交换文本信息的语法
javaScript对象表示法
用于数据传递
json中的数据格式 python中的数据
数字 整型 浮点数
字符串 字符串
布尔值 true false True False
数组 列表。元祖
对象 字典
null None
常见的json数据格式
{
code:200,
values:[
{"name":'lal','age':20}]
}
{} josn数据对应json对象
[] josn数组
'''
1 import json 2 age = 10 3 #dumps把数据转化为json语法中的数值数据 4 json_data = json.dumps(age) 5 print(json_data) 6 7 name = '橙子' 8 json_dta =json.dumps(name) 9 print(json_data) 10 11 person ={"chinese":99} 12 json_data =json.dumps(person) 13 print(json_data) 14 15 16 17 #在python中可自定义类型 自定义的类型 在json中没有对应的数据格式 18 #需要制定编码规则 通过编码规则 将自定义类型的数据转换为json可识别的数据 19 class Person(): 20 def __init__(self,name): 21 self.name = name 22 def __str__(self): 23 return f"Person(name={self.name})" 24 #__repr__通过容器调用对象调用__repr__ 25 #__str__当打印对象时输出设定的格式信息 26 __repr__ =__str__ 27 28 p = Person("橙子") 29 print(p) 30 print(type(p))#<class '__main__.Person'> 31 #在json中无对应数据 32 33 #存储Person类型的数据-需获取json可识别数据格式 34 #方式1 35 #对象__dict__获取对象的特征信息以字典形式存储 36 json_data = json.dumps(p.__dict__) 37 print(json_data)#{"name": "u6a59u5b50"} 38 #本质上存储的是字典 39 40 #loads解析为json数据 41 python_data =json.loads(json_data) 42 print(python_data) 43 44 #对应对象为Person对象 需要根据数据信息创建对象 45 p = Person(python_data["name"]) 46 print(p,type(p))#Person(name=橙子) <class '__main__.Person'> 47 48 #方法二存储时设置编码规则 存的是指定的编码规则数据 49 #获取的时候要对应有一个解码规则 在根据数据解析成对象 50 #对以上操作封装 51 #PersonEncoder编码 52 class PersonEncoder(json.JSONEncoder): 53 #重写方法 54 #这个方法在dumps时 内部自动调用 55 #子类重写父类的方法 子类对党调用时 只能调用重写 因为会吧父类方法覆盖 56 def default(self, o): 57 #把规则写出来 58 #o 表示要进行json转换的对象 59 return o.__dict__ 60 P =Person('橙子2') 61 #CLS制定编码规则 62 #对象__dict__获取对象的特征信息以字典形式存储 63 json_data =json.dumps(P,cls=PersonEncoder) 64 print(json_data)#{"name": "u6a59u5b502"} 65 66 #解析JSONDecoder 67 class PersonDecoder(json.JSONDecoder): 68 def __init__(self): 69 #指定解码规则 70 #object_hook对象挂钩-对象解析-接受的是一个函数 71 super().__init__(object_hook=self.to_python_obj) 72 73 def to_python_obj(self,d): 74 #d接受的是字典,当前制定的转化为json对象的数据格式 75 return Person(d['name']) 76 77 #解析操作 78 python_data =json.loads(json_data,cls=PersonDecoder) 79 print(python_data)#Person(name=橙子2)