JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。
JSON和XML的比较可谓不相上下。
JSON的结构
JSON有2种结构:对象和数组
对象:
对象:对象在js中表示为{ }括起来的内容,数据结构为 { key:value, key:value, ... }的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是数字、字符串、数组、对象这几种。
数组:
数组:数组在js中是中括号[ ]括起来的内容,数据结构为 ["Python", "javascript", "C++", ...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。
JSON的方法
load打开文件
loads字符串
dump
dumps
string串
load传入文件,返回值为json格式
loads传入字符串,返回值是json格式
数据源:
{ "store": {
"book": [
{ "category": "reference",
"author": "李白",
"title": "Sayings of the Century",
"price": 8.95
},
{ "category": "fiction",
"author": "杜甫",
"title": "Sword of Honour",
"price": 12.99
},
{ "category": "fiction",
"author": "白居易",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{ "category": "fiction",
"author": "苏轼",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
案例:
import json
#打开一个文件,进行读取,将文件中的数据转换成json格式
books = json.load(open('./books.txt', mode='r', encoding='utf-8'))
# print(books)
# print(type(books)) #
########################################################
with open('./books.txt', mode='r', encoding='utf-8') as fp:
books1 = fp.read()
books2 = json.loads(books1,encoding='utf-8')
print(books1)
#,获取数据不方便,批量获取得使用正则
print(type(books1))
print(books2)
#,获取数据方便,如下尝试
print(type(books2))
#获取李白数据
bookinfo = books2['store']['book']
# print('李白数据:',bookinfo )
for book in bookinfo:
print(book['author'],book['title'],book['price'])
########################################################
#传入dict对象,写入json文件中,数据类型为json
#注意:原数据中有中文的时候,默认是用asciic编码的,我们需要用ensure_ascii=False,这样编码就变成utf-8了
json.dump(books2,open('./books.json',mode='w',encoding='utf-8'),ensure_ascii=False)
#传入str对象,写入json文件中数据类型还是str
json.dump(books1,open('./books1.json',mode='w',encoding='utf-8'))
########################################################
#dumps方法:将对象转换成字符串
books3 = json.dumps(books2,ensure_ascii=False)
print(books3)
#
print(type(books3))
总结load、loads、dump、dumps
loads 传入对象(str),出来是json
dumps 传入对象(json),出来是str
以上俩个常用
load 传入一个文件,返回是json(把文件中的数据转换成json)
dump 传入一个对象(json),一个不存在的json文件,把对象写入json文件中,格式是json
传入一个对象(str), 一个不存在的json文件,把对象写入json文件中, 格式是str
JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。
JsonPath 对于 JSON 来说,相当于 XPATH 对于 XML
简单版:
JsonPath解析JSON 格式
XPATH 解析 HTML/XML格式
Beautiful Soup 解析 HTML/XML格式
JsonPath与XPath语法对比