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": "\u6a59\u5b50"}
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": "\u6a59\u5b502"}
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)