一、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用法详解相关推荐

  1. oracle8i substr,Oracle中的INSTR,NVL和SUBSTR函数的用法详解

    Oracle中INSTR的用法: INSTR方法的格式为 INSTR(源字符串, 要查找的字符串, 从第几个字符开始, 要找到第几个匹配的序号) 返回找到的位置,如果找不到则返回0. 例如:INSTR ...

  2. sort在c语言中的作用,c语言中sort的用法详解.docx

    c语言中sort的用法详解.docx C语言中SORT的用法详解C语言的学习很多是比较复杂的,那么C语言中SORT的用法的用法你知道吗下面学习啦小编就跟你们详细介绍下C语言中SORT的用法的用法,希望 ...

  3. python中values作用_Python values()与itervalues()的用法详解

    dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value: d = { 'Adam': 95, 'Li ...

  4. java中finaljava中this_Java中this,static,final,const用法详解

    一.this 用类名定义一个变量的时候,定义的应该只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法,那们类里面是够也应该有一个引用来访问自己的属性和方法纳?JAVA提供了一个很好的东西, ...

  5. html后代元素选择器,怎么使用html5中的后代选择器?后代选择器的用法详解!

    最近网上很多小伙伴就在问,怎么使用html5中的后代选择器?看到这我就有点想说的了,对于怎么使用html5中的后代选择器,这个问题其实还是蛮重要的.对于想要从事互联网这块功的话算是基本都要有所了解的. ...

  6. html怎么在页面中获取操作用户的id,CSS ID 选择器详解

    类选择器还是 ID 选择器? 在类选择器这一章中我们曾讲解过,可以为任意多个元素指定类.前一章中类名 important 被应用到 p 和 h1 元素,而且它还可以应用到更多元素. 区别 1:只能在文 ...

  7. python中*args 与 **kwargs形式的参数的用法详解

    我在学习OpenStack的过程中遇到了大量的如下形式的代码段: args['body'] = json.loads(request.body) result = method(request=req ...

  8. python属性和方法的区别_Python中几种属性访问的区别与用法详解

    起步 在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个name属性,那便可以使用foo.name对此属性进行访问.一般而言, ...

  9. 在Linux中ipcs命令,Linux下ipcs指令的用法详解。

    ipcs是Linux下显示进程间通信设施状态的工具.可以显示消息队列.共享内存和信号量的信息.对于程序员可能更有用些,普通的系统管理员一般用不到此指令. (1)显示消息队列信息, 修改消息队列大小: ...

最新文章

  1. 基于SSM实现网上购物商城系统
  2. 5天玩转C#并行和多线程编程 —— 第四天 Task进阶
  3. typescript利用接口类型声明变量_TypeScript入门指南(基础篇)
  4. 一起认识FileShare
  5. codevs 1907 方格取数 3
  6. light7在微信ios下input点击困难
  7. pdnovel.php_Pdnovel 在線閱讀體驗
  8. command shortcut paste
  9. Tomcat服务器时间不正确
  10. java出租车计费系统_基于JavaEE的出租车计费系统的设计实验报告
  11. python爬虫跳过付费数据_Python爬虫教程:包图网免费付费素材爬取!
  12. 全网粉丝200万,他是如何打造个人IP账号的?
  13. 品牌稿件怎么写?这些品牌稿件写作技巧值得一看
  14. 微信小程序重新发起请求加载页面
  15. 微电子学与计算机发表周期,计算机核心期刊发表周期是多少?
  16. Red Hat Linux9.0操作系统安装和配置入门
  17. 第二次练车,练了一天倒库
  18. PostgreSQL中的ACID特性介绍
  19. IT职业规划:大公司VS小公司,怎样选择更有前途?
  20. 历史名酒元氏益成永——宋曹贡酒

热门文章

  1. redis的scan命令的源码分析,实现原理
  2. Google布隆过滤器与Redis布隆过滤器详解
  3. 486. Predict the Winner | 486. 预测赢家(博弈论)
  4. Windows10文件重命名/复制/移动时,导致文件资源管理器卡顿,解决方案
  5. 【Python爬虫】写个爬虫爬取自己的博客,可以刷访问量
  6. Spring Boot Admin的使用
  7. MongoDB学习笔记(四)使用Java进行实时监控与数据收集(空间使用量、连接数)
  8. mysql移植海思_海思Hi3518EV200(5)图像sensor驱动开发
  9. C++实现字符串分割函数split()
  10. 一文看懂深度学习——人工智能系列学习笔记