python json安装_python json

本文介绍了Python中json模块的使用,包括json.loads()将JSON字符串解码为Python对象,json.dumps()将Python对象编码为JSON字符串,json.dump()写入文件,以及json.load()读取文件并转换为Python类型。还提到了JsonPath的安装和基本用法,以及处理非UTF-8编码的JSON字符串的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSON模块的四个功能

json模块提供了四个功能:dumps、dump、loads、load,用于字符串 和 python数据类型间进行转换。

json.loads()

json.loads()实现把Json格式字符串解码转换成Python对象 从json到python的类型转化对照如下:

JSON Python数据类型

Json格式字符串解码转换成Python对象

object dict

array list

number(int) int,long

number(real) float

true True

false False

null None

json.dumps()

json.dumps()实现把python类型转化为json字符串,返回一个str对象 把一个Python对象编码转换成Json字符串,从python原始类型向json类型的转化对照如下:

Python数据类型 JSON

python类型转化为json字符串

dict object

list array

int、long、float number

str、Unicode string

True true

False false

None null

注意:json.dumps() 序列化时默认使用的ascii编码,添加参数 ensure_ascii=False 禁用ascii编码,按utf-8编码显示。

json.dump()

将Python内置类型序列化为json对象后写入文件。

例子:

import json

listStr = [{"a1": "1"}, {"b1": "2"}]

json.dump(listStr, open("listStr.json","w"), ensure_ascii=False)

dictStr = {"a2": "3", "b2": "4"}

json.dump(dictStr, open("dictStr.json","w"), ensure_ascii=False)

运行结果:

会在当前目录生成 listStr.json 文件和 dictStr.json 2个文件。

json.load()。

读取文件中json形式的字符串元素 转化成python类型。

例子:

接口文档中一个请求报文示例,我们就把这个示例中的json形式的报文转换成python类型。

1.在当前目录新建一个名为“接口请求报文.json”文件。

代码实现:

import json

js_t_py = json.load(open("./接口请求报文.json",encoding="utf-8"))

print(js_t_py)

print(type(js_t_py))

运行结果:

JsonPath

JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。

JsonPath 对于 JSON 来说,相当于 XPATH 对于 XML。

14.3.1 JsonPath的安装

安装方法一:点击Download URL链接下载jsonpath,解压之后执行python setup.py install。

安装方法二:使用 pip install jsonpath 命令直接安装。

14.3.2 JsonPath 官方示例

{ "store": {

"book": [

{ "category": "reference",

"author": "Nigel Rees",

"title": "Sayings of the Century",

"price": 8.95

},

{ "category": "fiction",

"author": "Evelyn Waugh",

"title": "Sword of Honour",

"price": 12.99

},

{ "category": "fiction",

"author": "Herman Melville",

"title": "Moby Dick",

"isbn": "0-553-21311-3",

"price": 8.99

},

{ "category": "fiction",

"author": "J. R. R. Tolkien",

"title": "The Lord of the Rings",

"isbn": "0-395-19395-8",

"price": 22.99

}

],

"bicycle": {

"color": "red",

"price": 19.95

}

}

}

JsonPath与XPath语法对比

Json结构清晰,可读性高,复杂度低,非常容易匹配,下表中对应了XPath的用法。

Xpath JSONPath 描述

/ $ 根节点

. @ 现行节点

/ .or[] 取子节点

.. 不支持 取父节点,Jsonpath不支持

// .. 忽略位置,选择所有符合条件的条件

* * 匹配所有元素节点

@ 不支持 根据属性访问,Json不支持,因为Json 是个Key-value递归结构,不需要。

[] [] 迭代器标示(可以在里边做简单的迭代操作,如数组下标,根据内容选值等)

| [,] 支持迭代器中做多选。

[] ?() 支持过滤操作。

不支持 () 支持表达式计算

() 不支持 分组,JsonPath不支持

示例语法对比。

Xpath JSONPath 示例结果

/store/book/author $.store.book[*].author the authors of all books in the store

如下:

"Nigel Rees"

"Evelyn Waugh"

"Herman Melville"

"J. R. R. Tolkien"

//author $..author all authors

/store/* $.store.* all things in store, which are some books and a red bicycle.

/store//price $.store..price the price of everything in the store.

//book[3] $..book[2] the third book

//book[last()] $..book[(@.length-1)]

$..book[-1:] the last book in order.

//book[position()<3] $..book[0,1]

$..book[:2] the first two books

//book[isbn] $..book[?(@.isbn)] filter all books with isbn number

//book[price<10] $..book[?(@.price<10)] filter all books cheapier than 10

//* $..* all Elements in XML document. All members of JSON structure.

案例

案例:

代码实现:

import jsonpath

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}

r = requests.get(url,headers=headers)

html = r.text

# 把json格式字符串转换成python对象

jsonobj = json.loads(html)

# 从根节点开始,匹配name节点

citylist = jsonpath.jsonpath(jsonobj,‘$..name‘)

print(citylist)

print(type(citylist))

#新建一个city.json文件,并设置编码格式为utf-8

fp = open(‘city.json‘,‘w‘,encoding="utf-8")

content = json.dumps(citylist, ensure_ascii=False)

print(content)

fp.write(content)

fp.close()

运行结果:

注意事项:

json.loads() 是把 Json格式字符串解码转换成Python对象,如果在json.loads的时候出错,要注意被解码的Json字符的编码。

如果传入的字符串的编码不是UTF-8的话,需要指定字符编码的参数 encoding

dataDict = json.loads(jsonStrGBK);

dataJsonStr是JSON字符串,假设其编码本身是非UTF-8的话而是GBK 的,那么上述代码会导致出错,改为对应的:

dataDict = json.loads(jsonStrGBK, encoding="GBK");

如果 dataJsonStr通过encoding指定了合适的编码,但是其中又包含了其他编码的字符,则需要先去将dataJsonStr转换为Unicode,然后再指定编码格式调用json.loads()

dataJsonStrUni = dataJsonStr.decode("GB2312");

dataDict = json.loads(dataJsonStrUni, encoding="GB2312");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值