Python知识点记录四(JSON)
JSON: JavaScript Object Notation(JavaScript对象标记)
其本质为“一种轻量级的数据交换格式”。JSON字符串就是JSON的表现形式(载体)。
符合JSON格式的字符串叫做JSON字符串。
JSON的优点(较之XML):易于阅读、易于解析、网络传输效率高。非常适合作为跨语言交换数据。
对于Python来说,其接收到的JSON格式的字符串的内涵有多种形式,比如“字典”、“字典作为元素的列表”,尽管其表现出来总是以字符串的形式。
比如:
#JSON object的字符串形式 json_str = '{"name": "qiyue", "age": 18}' #JSON array的字符串形式 json_str0 = '[{"name": "qiyue", "age": 18, "flag":false}, {"name": "bayue", "age": 19}]'
这里需要注意JSON格式中内部必须用双引号表示字符串。
一、JSON在Python中的反序列化
如果Python中接收到了JSON信息,其内部提供了json模块,可以通过json.loads()方法将这个信息字符串“反序列化”为Python语言中的对应格式变量。
import json #JSON object的字符串形式 json_str = '{"name": "qiyue", "age": 18}' student = json.loads(json_str) print(type(student)) print(student) #输出: ''' <class 'dict'> {'name': 'qiyue', 'age': 18} '''
import json #JSON array的字符串形式 json_str0 = '[{"name": "qiyue", "age": 18, "flag":false}, {"name": "bayue", "age": 19}]' student0 = json.loads(json_str0) print(type(student0)) print(student0) print(student0[0]['name']) print(student0[1]['age']) #输出: ''' <class 'list'> [{'name': 'qiyue', 'age': 18, 'flag': False}, {'name': 'bayue', 'age': 19}] qiyue 19 '''
二、Python至JSON格式的序列化
序列化即是把Python中的数据转换为JSON格式的数据,通过json模块中的dumps()方法。
import json a0 = 10 a1 = 3.1415926 a2 = 'Hello' a3 = [1,3,5,7,9] a4 = ('x', 'y', 'z') a5 = {1: 11, 2: 22, 3:33} s0 = json.dumps(a0) s1 = json.dumps(a1) s2 = json.dumps(a2) s3 = json.dumps(a3) s4 = json.dumps(a4) s5 = json.dumps(a5) print(s0) print(s1) print(s2) print(s3) print(s4) print(s5) ''' 输出: 10 3.1415926 "Hello" [1, 3, 5, 7, 9] ["x", "y", "z"] {"1": 11, "2": 22, "3": 33} '''
import json student = [ {'name': 'qiyue', 'age': 18, 'flag': False}, {'name': 'bayue', 'age': 19} ] json_str = json.dumps(student) print(type(json_str)) print(json_str) ''' 输出: <class 'str'> [{"name": "qiyue", "age": 18, "flag": false}, {"name": "bayue", "age": 19}] '''
三、JSON、JSON对象与JSON字符串
JSON只是一种用于数据传输、交换的数据标准格式,是对ECMASCRIPT标准的某一方面的实现。
JSON对象只成立于JavaScript语言中,对于其他语言如Python来说并不存在JSON对象这种说法,因为对Python而言,只有JSON字符串与之交互(序列化及反序列化)。)