JSON

文章目录

  • 什么是JSON
    • 一、python与json数据的交换,JSON的反序列化
    • 符合json规范的json字符串
    • json对象object与json数组array
    • 二、序列化
    • 三、JSON、JSON对象、JSON字符串(面试笔试)的区别

什么是JSON

json是轻量级的数据交换格式,强调一万遍:json是一种数据格式
说是轻量级,其实是与其他的数据格式做的对比,XML。xml是json之前出现之前的一种数据交换格式

json的载体是啥?字符串是json的载体,是json的变现形式
什么是json字符串?符合json格式的字符串叫做json字符串

一、python与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格式的,他不是一个正确的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对象object与json数组array

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字符串(面试笔试)的区别

我们要跳出语言的范畴看待这三个东西
JSON:轻量级的数据交换格式
JSON对象:
JSON字符串:



你可能感兴趣的:(python基础小知识)