Python中json模块与jsonpath模块的区别是什么

发布时间:2021-02-02 11:15:52

来源:亿速云

阅读:94

作者:小新

这篇文章主要介绍了Python中json模块与jsonpath模块的区别是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。

JSON和XML相比较可谓不相上下。

Python 3.X中自带了JSON模块,直接import json就可以使用了。

官方文档:http://docs.python.org/library/json.html

Json在线解析网站:http://www.json.cn/

JSON

json简单来说就是JavaScript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构。

对象:对象在js中表示为{ }括起来的内容,数据结构为{key1: value1, key2:value2, ...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是数字、字符串、数组、对象。

数组:数组在js中是[ ]括起来的内容,数据结构为['Python', ‘JavaScript', 'C++', ...],取值方式和所有语言一样,使用索引获取,字段值的类型可以是数字、字符串、数组、对象。

json模块

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

1.json.dumps()

实现Python类型转化为Json字符串,返回一个str对象,从Python到Json的类型转换对照如下:PythonJson

dictobject

list, tuplearray

str, utf-8string

int, floatnumber

Truetrue

Falsefalse

Nonenull#!/usr/bin/python3

# -*- coding:utf-8 -*-

__author__ = 'mayi'

import json

listStr = [1, 2, 3, 4]

tupleStr = (1, 2, 3, 4)

dictStr = {"city": "北京", "name": "蚂蚁"}

print(json.dumps(listStr))

# [1, 2, 3, 4]

print(type(json.dumps(listStr)))

#

print(json.dumps(tupleStr))

# [1, 2, 3, 4]

print(type(json.dumps(tupleStr)))

#

# 注意:json.dumps() 序列化时默认使用的ascii编码

# 添加参数 ensure_ascii=False 禁用ascii编码,按utf-8编码

print(json.dumps(dictStr, ensure_ascii = False))

# {"city": "北京", "name": "蚂蚁"}

print(type(json.dumps(dictStr, ensure_ascii = False)))

#

2.json.dump()

将Python内置类型序列化为Json对象后写入文件#!/usr/bin/python3

# -*- coding:utf-8 -*-

__author__ = 'mayi'

import json

listStr = [{"city": "北京"}, {"name": "蚂蚁"}]

json.dump(listStr, open("listStr.json", "w", encoding = "utf-8"), ensure_ascii = False)

dictStr = {"city": "北京", "name": "蚂蚁"}

json.dump(dictStr, open("dictStr.json", "w", encoding = "utf-8"), ensure_ascii = False)

3.json.loads()

把Json格式字符串解码转换成Python对象,从Json到Python的类型转换对照如下:JsonPython

objectdict

arraylist

stringutf-8

number(int)int

number(real)float

trueTrue

falseFalse

nullNone#!/usr/bin/python3

# -*- coding:utf-8 -*-

__author__ = 'mayi'

import json

strList = '[1, 2, 3, 4]'

strDict = '{"city": "北京", "name": "蚂蚁"}'

print(json.loads(strList))

# [1, 2, 3, 4]

# json数据自动按utf-8存储

print(json.loads(strDict))

# {'city': '北京', 'name': '蚂蚁'}

4.json.load()

读取文件中Json形式的字符串,转换成Python类型#!/usr/bin/python3

# -*- coding:utf-8 -*-

__author__ = 'mayi'

import json

strList = json.load(open("listStr.json", "r", encoding = "utf-8"))

print(strList)

# [{'city': '北京'}, {'name': '蚂蚁'}]

strDict = json.load(open("dictStr.json", "r", encoding = "utf-8"))

print(strDict)

# {'city': '北京', 'name': '蚂蚁'}

JsonPath

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

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

下载地址:https://pypi.python.org/pypi/jsonpath

安装方法:下载后解压之后执行 python setup.py install

官方文档:http://goessner.net/articles/JsonPath

JsonPath与XPath语法对比:

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

/$根节点

.@现行节点

/. or []取子节点

..n/a取父节点,Jsonpath未支持

//..不管位置,选择所有符合条件的节点

**匹配所有元素节点

@n/a根据属性访问,JsonPath不支持

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

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

[]?()支持过滤操作

n/a()支持表达式计算

()n/a分组,JsonPath不支持

示例:

以拉勾网城市JSON文件:http://www.lagou.com/lbs/getAllCitySearchLabels.json 为例,获取所有的城市名称。#!/usr/bin/python3

# -*- coding:utf-8 -*-

__author__ = 'mayi'

import urllib.request

import json

import jsonpath

# 拉勾网城市JSON文件

url = 'http://www.lagou.com/lbs/getAllCitySearchLabels.json'

# User-Agent头

header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'}

# url 连同 headers,一起构造Request请求,这个请求将附带 chrome 浏览器的User-Agent

request = urllib.request.Request(url, headers = header)

# 向服务器发送这个请求

response = urllib.request.urlopen(request)

# 获取页面内容:bytes

html = response.read()

# 转码:bytes转str

html = html.decode("utf-8")

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

obj = json.loads(html)

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

city_list = jsonpath.jsonpath(obj, '$..name')

# 打印获取的name节点

print(city_list)

# 打印其类型

print(type(city_list))

# 写入本地磁盘文件

with open("city.json", "w", encoding = "utf-8") as f:

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

f.write(content)

感谢你能够认真阅读完这篇文章,希望小编分享的“Python中json模块与jsonpath模块的区别是什么”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

python json模块有什么用_Python中json模块与jsonpath模块的区别是什么相关推荐

  1. Python基础_第3章_Python中的循环结构

    Python基础_第3章_Python中的循环结构 文章目录 Python基础_第3章_Python中的循环结构 Python中的循环结构 一.回顾分支练习题 1.判断是否为一个合法三角形 2.求世界 ...

  2. Python基础_第5章_Python中的数据序列

    Python基础_第5章_Python中的数据序列 文章目录 Python基础_第5章_Python中的数据序列 Python中的数据序列 一.字典--Python中的==查询==神器 1.为什么需要 ...

  3. python中json模块博客园_Python中的Json模块详解

    Python中的Json模块详解 Json(JavaScript Object Notation)它是一种轻量级的数据交换格式,具有数据格式简单,读写方便易懂等很多优点.许多主流的编程语言都在用它来进 ...

  4. python中json模块博客园_python的json模块

    python的json模块 什么是序列化和反序列化? 序列化 在分布式环境下,无论是何种数据,都会以二进制序列的形式在网络上传输.序列化是一种将对象以一连串的字节描述的过程,用于解决在对对象流进行读写 ...

  5. python中pickle模块的用法_Python中json模块和pickle模块的简单介绍(附示例)

    本篇文章给大家带来的内容是关于Python中json模块和pickle模块的简单介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Python中的json模块和pickl ...

  6. python序列化和反序列化_Python 中 json 数据序列化和反序列化

    1.Json 定义 定义:JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.JSON 的数据格式其实就是 python 里面的字典格式,里 ...

  7. python在json文件中查找指定数据_Python中json的取值 如何使用python提取json中指定字段的数据...

    python中为什么用json有什么作用 如何用python读取json里面的值啊我爱你,所以我给了你伤害我的权力,只要我能忍受,我会一直陪伴着你,但你不能伤害我太多. 数据如下,我想要读取name. ...

  8. python的json格式输出_python中json格式数据输出实现方式

    python中json格式数据输出实现方式 主要使用json模块,直接导入import json即可. 小例子如下: #coding=UTF-8 import json info={} info[&q ...

  9. python loads的用法_Python中json.loads方法

    Python中json.loads方法的典型用法代码 示例1: _initialize_members # 需要导入模块: import json [as 别名] # 或者: from json im ...

最新文章

  1. 微信支付:小微商户申请入驻第二步:图片上传
  2. Linux cmake使用入门
  3. 国内机床发展水平和现状
  4. java请求注释_求达人给java代码【注释】!!请求尽量详细,万分感谢!!
  5. LinkedList专题2
  6. cisco服务器维修,面向终端的AMP控制台的思科维护的排除列表更改
  7. python随机颜色代码_python绘制随机颜色太阳花
  8. python和access哪个难_python和access的区别
  9. 架构之重构的12条军规
  10. Github 下载项目的某一分支版本
  11. oracle停止一切进程,oracle中expdp/impdp进程如何停止
  12. 为什么html中li浮动,相对定位下的绝对定位下的li为什么不能浮动??
  13. L2-009. 抢红包-PAT团体程序设计天梯赛GPLT
  14. 今天看了《一声叹息》
  15. 啊哈C语言4.9练习
  16. 一种pluntUML实时渲染图片的方法
  17. 揪出系统中秘密隐藏的木马(下)
  18. Postgresql - 查询表引用或被引用的外键
  19. 社科院与杜兰大学金融管理硕士项目——有规划的人生值得期待,你当下的规划是什么呢
  20. xbox360 功率测试软件,Xbox Series X完整开箱照及功耗测试公开

热门文章

  1. 利用mem数组在MM32 MicroPython中实现COMP的功能
  2. 为什么150kHz定位,距离越远接收信号越强呢?
  3. RT-Thread逐飞-智能车培训之RT-Thread在全向行进组中的应用
  4. 2020年人工神经网络第二次作业-参考答案第七题
  5. oracle外键死锁,Oracle技术之和外键相关的阻塞和死锁问题总结(二)
  6. Linux怎么查询全部容器时间,docker容器与Linux主机环境获取时间不一致
  7. vbs结束进程代码_物联网学习教程—Linux系统编程之进程控制
  8. flutter 应用场景_Flutter混合开发的路由栈管理
  9. div固定大小文字溢出自动缩小_CSS样式更改——框模型、定位、浮动、溢出
  10. Verilog设计实例(6)基于Verilog的各种移位寄存器实现