活动地址:CSDN21天学习挑战赛

一、JSON简介

概述:
JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也就是python里面的列表。

特点:
json独立于语言 json具有自我描述性,更加理解 json比xml更小、更快、更易理解
爬虫经常会获取接口数据,接口数据就是json格式

语法格式: {key:value1,key2:value2} 键值对形式

格式1:JSON 对象

对象是一个无序的“‘名称/值’对”集合。一个对象以{左括号开始,}右括号结束。每个“名称”后跟一个:冒号;“‘名称/值’ 对”之间使用,逗号分隔。

{"name": "小李", "sex": 男}

格式2:JSON 数组

和普通的 JS 数组一样,JSON 表示数组的方式也是使用方括号 []。

{
    "student":
        [
            {"name": "小李", "sex": "男"},
            {"name": "小丽", "sex": "女"},
            {"name": "小王", "sex": "男"}
        ]
}

注意事项:

1.json的键值对的键部分,必须用双引号包裹,单引号都不行(所以如果在键中出现了关键字,也被字符化了),而js中对象没有强制要求(所以在键中不允许出现关键字)。
2. json的键值对的值部分,不允许出现函数function,undefined,NaN,但是可以有null,js中对象的值中可以出现。
3. json数据结束后,不允许出现没有意义的逗号

二、json模块

json模块是python内置的库,在使用的时候直接导入就可以。
json模块的操作使用相对较为简单,该模块只有四个方法dump()、load()、dumps()、loads()

作用:
json模块的主要功能是将序列化数据从文件里读取出来或者存入文件。其中dump()是将数据存入文件中,load()是用于读取文件。而dumps()和loads()是对python对象进行操作。dumps()是将python对象编码成json字符串。loads()是将json字符串解码成python对象。

方法:

(1)json.dumps()

将python数据类型转换为json格式的字符串
 import json

 # Python字典
 person = {"name": "小李", "sex": "男", "tel": ["8234588", "1244351"], "isonly": True}
 print(person)
 print(type(person))

 # Python字典转换为json字符串
 jsonStr = json.dumps(person)
 print(jsonStr)
 print(type(jsonStr))

写入文件的方式:

import json

person = {"name": "小李", "sex": "男", "tel": ["8234588", "1244351"], "isonly": True}

jsonStr = json.dumps(person)
# 打开文件   在文件里写入转成的json串
with open('test.json', 'w', encoding='utf-8') as f:  
	f.write(jsonStr)  

(2)json.dump()

将python数据类型转换并保存到son格式文件内
 import json
 person = {"name": "小李", "sex": "男", "tel": ["8234588", "1244351"], "isonly": True}
 json.dump(person, open('data.json', 'w'), sort_keys=True, indent=4, separators=(',', ': '))

参数:

  • sort_keys: 是否排序 indent: 定义缩进距离
  • separators: 是一个元组,定义分隔符的类型
  • skipkeys:是否允许json字串编码字典对象时 字典的key不是字符串类型

json.dumps和json.dump的区别:

  1. jump()不需要使用.write()方法,只需要写那个字典,那个文件即可; 而 dumps()需要使用.write()方法写入
  2. 如果把字典写到文件里面的时候,dump()好用;但是如果不需要操作文件,或需要把内容存储到数据库和excel,则需要使用dumps()先把字典转换成字符串,再写入

(3)json.loads()

将json格式的字符串转换为python的类型
import json

# Python字典
person = {"name": "小李", "sex": "男", "tel": ["8234588", "1244351"], "isonly": True}
print(person)
print(type(person))

# Python字典转换为json字符串
jsonStr = json.dumps(person)
print(jsonStr)
print(type(jsonStr))

# json字符串再转换为Python字典
python_obj = json.loads(jsonStr)
print(python_obj)
print(type(python_obj))

文件操作

import json

f = open('data.json', encoding='utf-8')
content = f.read()  # 使用loads()方法需要先读文件
python_obj = json.loads(content)
print(python_obj)

(4)json.load()

从json格式的文件中读取数据并转换为python的类型
import json

python_obj = json.load(open('data.json','r'))
print(python_obj)
print(type(python_obj))

json.load和json.loads()的区别

  1. loads() 传的是json字符串,而 load() 传的是文件对象
  2. 使用 loads() 时需要先读取文件在使用,而load() 则不用

json模块就是用来读写数据的,用法也很简单,需要掌握的也不多。

更多推荐

python---json模块