json是轻量级的数据交换格式,强调一万遍:json是一种数据格式
说是轻量级,其实是与其他的数据格式做的对比,XML。xml是json之前出现之前的一种数据交换格式
json的载体是啥?字符串是json的载体,是json的变现形式
什么是json字符串?符合json格式的字符串叫做json字符串
json的载体就是字符串,在Python中就是str
json_str = "{name:qiyue, age:18}" # 这个是json字符串吗?我们假设他就是json字符串,我们现在要使用它
因为json是跨语言的,和语言是无关的,换一句话说,每一个json字符串几乎都可以在语言中找到对应的数据结构,如果我们可以转换成字典,那么用字典来操作就方便很多。
python中有个模块就叫做json,他里面提供的方法可以帮助我们来操作数据,json.loads可以帮助我们将json字符串转换成python对应的数据结构
import json
student = json.loads(json_str)
---------------------------------------------------------------------------
JSONDecodeError Traceback (most recent call last)
in
1 import json
----> 2 student = json.loads(json_str)
C:\Anaconda3\lib\json\__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
346 parse_int is None and parse_float is None and
347 parse_constant is None and object_pairs_hook is None and not kw):
--> 348 return _default_decoder.decode(s)
349 if cls is None:
350 cls = JSONDecoder
C:\Anaconda3\lib\json\decoder.py in decode(self, s, _w)
335
336 """
--> 337 obj, end = self.raw_decode(s, idx=_w(s, 0).end())
338 end = _w(s, end).end()
339 if end != len(s):
C:\Anaconda3\lib\json\decoder.py in raw_decode(self, s, idx)
351 """
352 try:
--> 353 obj, end = self.scan_once(s, idx)
354 except StopIteration as err:
355 raise JSONDecodeError("Expecting value", s, err.value) from None
JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
报错原因是因为上面那个字符串是不符合json格式的,他不是一个正确的json字符串。一个正确的json字符串来说每个key需要引号,值也需要,数字类型不需要。注意:json是跨语言的,他的引号规定是双引号,不能与python混为一谈,最外层需要单引号,这个才是符合json规范的字符串
json_str = '{"name":"qiyue", "age":18}'
import json
student = json.loads(json_str)
print(type(student), student)
print(type(student['name']), student['name'])
print(student['age'])
{'name': 'qiyue', 'age': 18}
qiyue
18
注意,并不是所有的语言都将json转化成字符串,比如哈希列表等,所以不要认为json字符串放在任何语言都是字典!
json_str = '{“name”:“qiyue”, “age”:18}'这样一个字符串,如果对应于json 数据结构中是一个json对象,但是他转化成python里面是一个字典;
但是在json数据格式里面并不是只有json对象这一种数据类型,比如还有josn数组:’[{“name”:“qiyue”, “age”:18}, {“name”:“qiyue”, “age”:18}]’,注意的是这都是利用的字符串进行表示的
# json数组转化成python里面表示的是什么?列表
json_str = '[{"name":"qiyue", "age":18, "type":false}, {"name":"qiyue", "age":18}]'
import json
student = json.loads(json_str)
print(type(student), student)
[{'name': 'qiyue', 'age': 18, 'type': False}, {'name': 'qiyue', 'age': 18}]
json.loads就是让json的数据类型转换成python的数据类型,在编程中有一种术语来定义由字符串到**某一种语言对象(数据结构)**的解析过程叫做:反序列化
json python
object dict
array list
string str
number int
number float
true True
false False
null None
既然有json字符串向python数据类型的反序列化(json.loads),就有python数据类型向json字符串的序列化的过程(josn.dumps):
import json
student = [
{"name":"qiyue", "age":18, "type":False},
{"name":"qiyue", "age":18}
]
json_str = json.dumps(student)
print(type(json_str), json_str)
[{"name": "qiyue", "age": 18, "type": false}, {"name": "qiyue", "age": 18}]
mongoDB适合存储序列化后的数据
我们要跳出语言的范畴看待这三个东西
JSON:轻量级的数据交换格式
JSON对象:
JSON字符串: