JSON对象是javascript object即javascript中的对象,是一种通用的格式,格式严格,不支持备注。 JSON文本和JSON对象的区别: JSON文本是符合JSON格式的文本,实际上是一个字符串 JSON对象是内存中一个对象,拥有属性和方法,可以通过对象获取其中的参数信息 Python中我们一般提到JSON对象指的是字典 Python的字典的格式和JSON格式,稍有不同: 字典中的引号支持单引号和双引号,JSON格式只支持双引号 字典中的True/False首字母大写,JSON格式为true/false 字典中的空值为None, JSON格式为null JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。它基于JavaScript的一个子集,但格式是独立于语言的,具有严格的语法规范,如只支持双引号包围键值对,布尔值表示为`true`和`false`,以及空值表示为`null`。 在Python中,处理JSON数据主要涉及到两个关键函数:`json.dumps()`和`json.loads()`。`dumps()`函数用于将Python对象转换为JSON格式的字符串,而`loads()`函数则用于将JSON格式的字符串解析回Python对象。 在Python的字典与JSON格式之间存在一些差异: 1. 字典中的键值对可以用单引号或双引号,但JSON规定必须使用双引号。 2. Python中的布尔值`True`和`False`在JSON中对应为`true`和`false`,且大小写敏感。 3. Python字典中的`None`在JSON中表示为`null`。 例如,将Python数据转换为JSON字符串的代码示例如下: ```python import json age = 10 json_age = json.dumps(age) print(json_age) # 输出:10 name = '橙子' json_name = json.dumps(name) print(json_name) # 输出:'橙子' person = {"chinese": 99} json_person = json.dumps(person) print(json_person) # 输出:{"chinese": 99} ``` 当遇到Python中自定义的类类型时,如`Person`,默认的`dumps()`函数无法处理,因为JSON中没有与之对应的表示。这时需要自定义编码器(Encoder)和解码器(Decoder)。`PersonEncoder`可以将`Person`对象转换为其内部的字典表示,而`PersonDecoder`则根据字典数据恢复`Person`对象。 ```python class Person: def __init__(self, name): self.name = name def __str__(self): return f"Person(name={self.name})" __repr__ = __str__ p = Person("橙子") json_data = json.dumps(p.__dict__) python_data = json.loads(json_data) new_p = Person(python_data["name"]) print(new_p, type(new_p)) ``` 上述代码展示了如何通过`__dict__`属性将`Person`对象转换为字典,再通过`loads()`解析回`Person`对象。 为了更高效地处理自定义类型,可以创建自定义的`JSONEncoder`子类,如`PersonEncoder`,并重写`default()`方法,使它返回对象的字典表示。同时,创建自定义的`JSONDecoder`子类,如`PersonDecoder`,并在`__init__()`中指定`object_hook`,用于在解析时创建`Person`对象。 ```python class PersonEncoder(json.JSONEncoder): def default(self, o): return o.__dict__ class PersonDecoder(json.JSONDecoder): def __init__(self): super().__init__(object_hook=self.to_python_obj) def to_python_obj(self, d): return Person(d['name']) P = Person('橙子2') json_data = json.dumps(P, cls=PersonEncoder) new_P = json.loads(json_data, cls=PersonDecoder) print(new_P, type(new_P)) ``` 这样,就可以在Python与JSON之间自由地转换自定义类型的数据了。理解和利用好`json`模块提供的`dumps()`和`loads()`函数,以及自定义编码器和解码器,是Python中处理JSON数据的关键。
- 粉丝: 5
- 资源: 974
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0