pythonjson中list操作_python3中json与JsonPath用法详解
一、JSON简介
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。
json.loads()
把Json格式字符串解码转换成Python对象,从json到python的类型转化对照如下:
JSON
Python
object
dict
array
list
string
str
number (int)
int
number (real)
float
true
True
false
False
null
None
import json
strList = '[1, 2, 3, 4]'
strDict = '{"city": "北京", "name": "大猫"}'
print(json.loads(strList)) #[1, 2, 3, 4]
print(json.loads(strDict)) #{'city': '北京', 'name': '大猫'}
1.2、json.dumps()
实现python类型转化为json字符串,返回一个str对象把一个Python对象编码转换成Json字符串,从python原始类型向json类型的转化对照如下:
Python
JSON
dict
object
list, tuple
array
str
string
int, float, int- & float-derived Enums
number
True
true
False
false
None
null
import json listStr = [1, 2, 3, 4] tupleStr = (1, 2, 3, 4) dictStr = {"city": "北京", "name": "大猫"} print(json.dumps(listStr)) print(json.dumps(tupleStr)) # 注意:json.dumps() 序列化时默认使用的ascii编码
# 添加参数 ensure_ascii=False 禁用ascii编码,按utf-8编码
print(json.dumps(dictStr)) print(json.dumps(dictStr, ensure_ascii=False)) '''
输出结果:
[1, 2, 3, 4]
[1, 2, 3, 4]
{"city": "\u5317\u4eac", "name": "\u5927\u732b"}
{"city": "北京", "name": "大猫"}
'''
1.3、json.load()
读取文件中json形式的字符串元素 转化成python类型
import json
strList = json.load(open("listStr.json"))
print(strList)
strDict = json.load(open("dictStr.json"))
print(strDict)
1.4、json.dump()
将Python内置类型序列化为json对象后写入文件
import json listStr = [{"city": "北京"}, {"name": "大刘"}] json.dump(listStr, open("listStr.json","w"), ensure_ascii=False) dictStr = {"city": "北京", "name": "大刘"} json.dump(dictStr, open("dictStr.json","w"), ensure_ascii=False)
二、JsonPath简介
JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具
2.1、JsonPath与Xpath语法对比
Json结构清晰,可读性高,复杂度低,非常容易匹配,下表中对应了XPath的用法
XPath
JSONPath
描述
/
$
根节点
.
@
现行节点
/
.or[]
取子节点
..
n/a
取父节点,Jsonpath未支持
//
..
就是不管位置,选择所有符合条件的条件
*
*
匹配所有元素节点
@
n/a
根据属性访问,Json不支持,因为Json是个Key-value递归结构,不需要。
[]
[]
迭代器标示(可以在里边做简单的迭代操作,如数组下标,根据内容选值等)
[,]
支持迭代器中做多选。
[]
?()
支持过滤操作.
n/a
()
支持表达式计算
()
n/a
分组,JsonPath不支持
实例
from urllib import request
#json解析库,对应到lxml
import json
#json的解析语法,对应到xpath 如果不存在则需要 pip install jsonpath
import jsonpath
url = "http://www.lagou.com/lbs/getAllCitySearchLabels.json"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:67.0) Gecko/20100101 Firefox/67.0"}
my_request = request.Request(url, headers = headers)
response = request.urlopen(my_request)
#取出json文件里的内容,返回的格式是字符串
html = response.read()
#把json格式字符串转化为python对象,此处返回的是一个Unicode字符
unicodeStr = json.loads(html)
#从根节点开始,匹配name节点
city_list = jsonpath.jsonpath(unicodeStr, '$..name')
#dumps() 默认中文为ascii编码格式,ensure_ascii 默认为True
#禁用ascii编码格式,返回的Unicode字符串,方便使用
str = json.dumps(city_list, ensure_ascii = False)
#将Unicode字符串的编码改为utf-8
str = str.encode('utf-8').decode('utf-8')
#文件打开的时候需要保存编码为utf-8
with open("city.json", "w", encoding='utf-8') as f:
f.write(str)
注意:记得设置文件编码为utf-8。否则容易出现乱码的。
pythonjson中list操作_python3中json与JsonPath用法详解相关推荐
- oracle8i substr,Oracle中的INSTR,NVL和SUBSTR函数的用法详解
Oracle中INSTR的用法: INSTR方法的格式为 INSTR(源字符串, 要查找的字符串, 从第几个字符开始, 要找到第几个匹配的序号) 返回找到的位置,如果找不到则返回0. 例如:INSTR ...
- sort在c语言中的作用,c语言中sort的用法详解.docx
c语言中sort的用法详解.docx C语言中SORT的用法详解C语言的学习很多是比较复杂的,那么C语言中SORT的用法的用法你知道吗下面学习啦小编就跟你们详细介绍下C语言中SORT的用法的用法,希望 ...
- python中values作用_Python values()与itervalues()的用法详解
dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value: d = { 'Adam': 95, 'Li ...
- java中finaljava中this_Java中this,static,final,const用法详解
一.this 用类名定义一个变量的时候,定义的应该只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法,那们类里面是够也应该有一个引用来访问自己的属性和方法纳?JAVA提供了一个很好的东西, ...
- html后代元素选择器,怎么使用html5中的后代选择器?后代选择器的用法详解!
最近网上很多小伙伴就在问,怎么使用html5中的后代选择器?看到这我就有点想说的了,对于怎么使用html5中的后代选择器,这个问题其实还是蛮重要的.对于想要从事互联网这块功的话算是基本都要有所了解的. ...
- html怎么在页面中获取操作用户的id,CSS ID 选择器详解
类选择器还是 ID 选择器? 在类选择器这一章中我们曾讲解过,可以为任意多个元素指定类.前一章中类名 important 被应用到 p 和 h1 元素,而且它还可以应用到更多元素. 区别 1:只能在文 ...
- python中*args 与 **kwargs形式的参数的用法详解
我在学习OpenStack的过程中遇到了大量的如下形式的代码段: args['body'] = json.loads(request.body) result = method(request=req ...
- python属性和方法的区别_Python中几种属性访问的区别与用法详解
起步 在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个name属性,那便可以使用foo.name对此属性进行访问.一般而言, ...
- 在Linux中ipcs命令,Linux下ipcs指令的用法详解。
ipcs是Linux下显示进程间通信设施状态的工具.可以显示消息队列.共享内存和信号量的信息.对于程序员可能更有用些,普通的系统管理员一般用不到此指令. (1)显示消息队列信息, 修改消息队列大小: ...
最新文章
- 基于SSM实现网上购物商城系统
- 5天玩转C#并行和多线程编程 —— 第四天 Task进阶
- typescript利用接口类型声明变量_TypeScript入门指南(基础篇)
- 一起认识FileShare
- codevs 1907 方格取数 3
- light7在微信ios下input点击困难
- pdnovel.php_Pdnovel 在線閱讀體驗
- command shortcut paste
- Tomcat服务器时间不正确
- java出租车计费系统_基于JavaEE的出租车计费系统的设计实验报告
- python爬虫跳过付费数据_Python爬虫教程:包图网免费付费素材爬取!
- 全网粉丝200万,他是如何打造个人IP账号的?
- 品牌稿件怎么写?这些品牌稿件写作技巧值得一看
- 微信小程序重新发起请求加载页面
- 微电子学与计算机发表周期,计算机核心期刊发表周期是多少?
- Red Hat Linux9.0操作系统安装和配置入门
- 第二次练车,练了一天倒库
- PostgreSQL中的ACID特性介绍
- IT职业规划:大公司VS小公司,怎样选择更有前途?
- 历史名酒元氏益成永——宋曹贡酒
热门文章
- redis的scan命令的源码分析,实现原理
- Google布隆过滤器与Redis布隆过滤器详解
- 486. Predict the Winner | 486. 预测赢家(博弈论)
- Windows10文件重命名/复制/移动时,导致文件资源管理器卡顿,解决方案
- 【Python爬虫】写个爬虫爬取自己的博客,可以刷访问量
- Spring Boot Admin的使用
- MongoDB学习笔记(四)使用Java进行实时监控与数据收集(空间使用量、连接数)
- mysql移植海思_海思Hi3518EV200(5)图像sensor驱动开发
- C++实现字符串分割函数split()
- 一文看懂深度学习——人工智能系列学习笔记