1.1   JSON介绍

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

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

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

1.2   JSON模块的四个功能

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

1. 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

例子:

import json

# 数据

js_list = ‘[1, 2, 3, 4]‘

js_dict = ‘{"name": "听海", "age": "年年18"}‘

# 数据转换前的类型

print(type(js_list))

print(type(js_dict))

# json.loads()实现把Json格式字符串解码转换成Python对象

List = json.loads(js_list)

Dict = json.loads(js_dict)  # json数据自动按Unicode存储

print(‘--------------------------‘)

# 转换后的显示

print(List)

print(Dict)

#数据转换后的类型

print(type(List))

print(type(Dict))

运行结果:

--------------------------

[1, 2, 3, 4]

{‘age‘: ‘年年18‘, ‘name‘: ‘听海‘}

2. 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

例子:

import json

listStr = [1, 2, 3, 4]

tupleStr = ("python3", "selenium3", "appium", "java")

dictStr = {"name": "听海", "age": "年年18"}

# 转换前的格式

print(type(listStr))

print(type(tupleStr))

print(type(dictStr))

# 把 python类型转化为json字符串,返回一个str对象。

js_strList=json.dumps(listStr)

js_tupleStr = json.dumps(tupleStr)

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

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

print("---------------")

# 打印转换后数据显示。

print(js_strList)

print(js_tupleStr)

print(js_dictStr)

# 转换后的格式

print(type(js_strList))

print(type(js_tupleStr))

print(type(js_dictStr))

运行结果:

---------------

[1, 2, 3, 4]

["python3", "selenium3", "appium", "java"]

{"name": "听海", "age": "年年18"}

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

3. 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个文件。

4. 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))

运行结果:

1.3   JsonPath

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

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

官方使用说明文档:http://goessner.net/articles/JsonPath

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

}

}

}

14.3.3 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.

1.4

案例

案例:

以拉勾网城市JSON文件 http://www.lagou.com/lbs/getAllCitySearchLabels.json 为例,获取所有城市。

代码实现:

import

jsonpath

url =

‘http://www.lagou.com/lbs/getAllCitySearchLabels.json‘

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");

python3 json安装_python3下JSON和JsonPath相关推荐

  1. python2与python3同时安装_Win10下python3和python2同时安装并解决pip共存问题

    转载自:https://www.cnblogs.com/hkgov/p/7504082.html 特别说明,本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似. ...

  2. linux解析json指针,Linux下JSON通信协议的使用和解析

    JSON的使用 1.JSON通信协议的概念 2.JSON的语法 2.1JSON对象 2.2JSON数组 2.3JSON字符串 3.JSON的使用与解析 3.1JSON结构体 3.2JSON格式的使用 ...

  3. python3.5安装tensorflow_win10下python3.5.2和tensorflow安装环境搭建教程

    在win10环境下搭建python3.5.2和tensorflow平台,供大家参考,具体内容如下 操作步骤如下: 1.官网(https://www.python.org/ )下载python3.5.2 ...

  4. python3.6安装scrapy-Windows下安装scrapy(python3.6)

    安装环境: Windows 8 64bit Python3.6 64bit 1. 安装Visual C++ Build Tools scrapy底层库依赖C语言编译环境,目前Python3.5和Pyt ...

  5. python3的安装_python3快速安装

    之前在linux上安装python3的时候,为了让不影响linux环境原有的python2的环境,选择的方法都是下载对应的linux环境的python包,不过 这里需要注意的是,不要更改linux默认 ...

  6. python3怎么安装mysql_Python3下mysqlclient的安装和使用

    1. 安装 1.1 下载wheel文件 网上搜多到的多数都是这种方案.从uci.edu按照自己的系统和Python版本现在wheel文件.比如我是Python3.6 32的版本. uci.edu提供的 ...

  7. python3.7安装pyqt4_Windows下PyQt4的安装(本文已过期)

    更多 1.环境 OS: Windows 7 64bits Python: 2.7.2 2.软件下载 对于Windows来说,只需要下载exe格式的文件即可.在这个exe文件中,已经包含了如下模块: P ...

  8. python3.5安装scrapy_win10下基于python3.5安装scrapy教程

    1.安装pywin32 pip install pywin32-220.1-cp35-cp35m-win32.whl 2.安装 twisted pip install Twisted-16.5.0-c ...

  9. python3.x安装cv2失败

    0 想给python3装一个opencv的库,结果捣鼓半天,倒给python2.x装上cv2了,而python3里import cv2则一直失败. 1 首先想到动态链接库,于是添加/usr/lib/p ...

最新文章

  1. C++中类成员函数的重载、覆盖和隐藏的区别,超清楚!
  2. 笔记本显示器仅计算机,将笔记本电脑(仅一个HDMI接口)连接到双屏幕(谨慎使用)的解决方案...
  3. BFS最短路打印路径
  4. python知识:@classmethod和@staticmethod的异同
  5. [云炬创业基础笔记]第十一章创业计划书测试3
  6. CSS中,float浮动的理解
  7. 一个不错的shell 脚本入门教程
  8. 【剑指offer】面试题23:链表中环的入口节点
  9. iPhone 12蓝色版疑似翻车:眼前的蓝不是蓝......
  10. HDU - 4456 Crowd
  11. 计算机过程控制系统李向舜pdf,2010-2011学年一学期(16-19周)考试安排表(1)
  12. Go语言基础进阶—程序结构—变量
  13. 2.C#2.0之泛型(完成)
  14. php常用字符串函数有哪些,ThinkPHP字符串函数及常用函数汇总
  15. centos分区方案
  16. 广告牌定时器怎么设置时间_定时器怎么调时间
  17. 互联网B端产品设计经验总结
  18. python中将数字转换为字符串
  19. 业务元数据管理——洞悉数据背后的业务含义
  20. SRRC认证样品要求 - 无线电发射设备型号核准设备类型及样...

热门文章

  1. 计算机主机组装的过程,电脑主机组装需要怎样的操作流程简单至极?
  2. uoj#268. 【清华集训2016】数据交互(动态dp+堆)
  3. npm 加入 TC39 委员会,参与定制 JavaScript 标准
  4. 详解动态规划最长公共子序列--JavaScript实现
  5. LeetCode 简要日记 455 104
  6. hadoop+hive+spark搭建(一)
  7. poj3264 - Balanced Lineup(RMQ_ST)
  8. 如何调试分析Android中发生的tombstone
  9. CentOS下实现postgresql开机自启动
  10. Linux启动界面切换:图形界面-字符界面(转)