JSON数据及其相关处理

278 阅读2分钟

JSON是一种轻量级的数据交换格式。所谓轻量级是与XML相比较而言的。相比而言,它所描述项目的字符更少。

1.JSON文档结构

构成JSON文档的结构有2种,一种是对象,一种就是数组。

1.1 对象

JSON对象是一个无序的键值对集合,其形式为{键:值},类似于python的字典。键是字符串类型,值可以是任何合法的JSON类型

下面举一个JSON对象的例子

{
  "name": "runoob",
  "url": "www.runoob.com"
}

1.2 数组

JSON数组是一个包含一个或多个值的有序集合,以[开始,以]结束

下面举一个JSON数组的例子

 [    {      "name": "菜鸟教程",      "url": "www.runoob.com"    },    {      "name": "google",      "url": "www.google.com"    },    {      "name": "微博",      "url": "www.weibo.com"    }  ]

2.JSON数据类型

2.1 对象

参照1.1

2.2 数组

参照1.2

2.3 数字

可以是整数或者浮点数

{
  "age": 30
}

2.4 布尔值

取值为true或false

{
  "flag": true
}

2.5 null

{
  "runoob": null
}

2.6 字符串

字符串必须在双引号之中,不能换成单引号

3.JSON类型和python类型的映射

.JSON类型和python类型的映射如下表所示

pythonJSON
字典对象
列表、元组数组
字符串字符串
整数、浮点数等类型数字
Truetrue
Falsefalse
Nonenull

4.JSON数据编码

要想将python数据在网络中进行传输和存储,需要将python数据转换为JSON数据再进行传输和存储,这个过程称之为编码

4.1 dumps函数

该函数将编码的结果以字符串形式返回

import json
​
data = {
    'no': 1,
    'name': 'Runoob',
    'url': 'http://www.runoob.com'
}
print(f'JSON编码前的数据类型为:{type(data)}')
json_obj = json.dumps(data)
print(json_obj)
print(f'JSON编码后的数据类型为:{type(json_obj)}')

result:

JSON编码前的数据类型为:<class 'dict'>
{"no": 1, "name": "Runoob", "url": "http://www.runoob.com"}
JSON编码后的数据类型为:<class 'str'>

4.2 dump函数

该函数是将编码的结果保存到文件对象中

保存文件前的情形如下:

image-20220619122533266.png

import json
​
data = {
    'no': 1,
    'name': 'Runoob',
    'url': 'http://www.runoob.com'
}
with open('json_dump.json', 'w') as f:
    json.dump(data, f)

保存文件后的情形如下:

image-20220619122956794.png

json_dump.txt的内容如下:

image-20220619123023497.png

5.JSON数据解码

要想从网络中接收或者磁盘中读取JSON数据,需要将JSON数据转换为python数据再进行接收或读取,这个过程称之为解码

5.1 loads函数

该函数是将JSON字符串数据进行解码,并返回python数据

import json
​
data = {
    'no': 1,
    'name': 'Runoob',
    'url': 'http://www.runoob.com'
}
json_obj = json.dumps(data)
print(f'JSON编码前的数据类型为:{type(json_obj)}')
data2 = json.loads(json_obj)
print(data2)
print(f'JSON编码后的数据类型为:{type(data2)}')

result:

JSON编码前的数据类型为:<class 'str'>
{'no': 1, 'name': 'Runoob', 'url': 'http://www.runoob.com'}
JSON编码后的数据类型为:<class 'dict'>

5.2 load函数

该函数是读取文件对象中的JSON字符串数据,并对其进行解码,,并返回python数据

import json
​
with open('json_dump.json', 'r') as f:
    data = json.load(f)
    print(data)
    print(f'data的类型为:{type(data)}')

result:

{'no': 1, 'name': 'Runoob', 'url': 'http://www.runoob.com'}
data的类型为:<class 'dict'>