日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

pythonjson中list操作_python3中json与JsonPath用法详解

發(fā)布時間:2024/1/23 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pythonjson中list操作_python3中json与JsonPath用法详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、JSON簡介

JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式,它使得人們很容易的進(jìn)行閱讀和編寫。同時也方便了機器進(jìn)行解析和生成。適用于進(jìn)行數(shù)據(jù)交互的場景,比如網(wǎng)站前臺與后臺之間的數(shù)據(jù)交互。

json.loads()

把Json格式字符串解碼轉(zhuǎn)換成Python對象,從json到python的類型轉(zhuǎn)化對照如下:

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()

實現(xiàn)python類型轉(zhuǎn)化為json字符串,返回一個str對象把一個Python對象編碼轉(zhuǎn)換成Json字符串,從python原始類型向json類型的轉(zhuǎn)化對照如下:

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() 序列化時默認(rèn)使用的ascii編碼

# 添加參數(shù) ensure_ascii=False 禁用ascii編碼,按utf-8編碼

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

輸出結(jié)果:

[1, 2, 3, 4]

[1, 2, 3, 4]

{"city": "\u5317\u4eac", "name": "\u5927\u732b"}

{"city": "北京", "name": "大貓"}

'''

1.3、json.load()

讀取文件中json形式的字符串元素 轉(zhuǎn)化成python類型

import json

strList = json.load(open("listStr.json"))

print(strList)

strDict = json.load(open("dictStr.json"))

print(strDict)

1.4、json.dump()

將Python內(nèi)置類型序列化為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結(jié)構(gòu)清晰,可讀性高,復(fù)雜度低,非常容易匹配,下表中對應(yīng)了XPath的用法

XPath

JSONPath

描述

/

$

根節(jié)點

.

@

現(xiàn)行節(jié)點

/

.or[]

取子節(jié)點

..

n/a

取父節(jié)點,Jsonpath未支持

//

..

就是不管位置,選擇所有符合條件的條件

*

*

匹配所有元素節(jié)點

@

n/a

根據(jù)屬性訪問,Json不支持,因為Json是個Key-value遞歸結(jié)構(gòu),不需要。

[]

[]

迭代器標(biāo)示(可以在里邊做簡單的迭代操作,如數(shù)組下標(biāo),根據(jù)內(nèi)容選值等)

[,]

支持迭代器中做多選。

[]

?()

支持過濾操作.

n/a

()

支持表達(dá)式計算

()

n/a

分組,JsonPath不支持

實例

from urllib import request

#json解析庫,對應(yīng)到lxml

import json

#json的解析語法,對應(yīng)到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文件里的內(nèi)容,返回的格式是字符串

html = response.read()

#把json格式字符串轉(zhuǎn)化為python對象,此處返回的是一個Unicode字符

unicodeStr = json.loads(html)

#從根節(jié)點開始,匹配name節(jié)點

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

#dumps() 默認(rèn)中文為ascii編碼格式,ensure_ascii 默認(rèn)為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)

注意:記得設(shè)置文件編碼為utf-8。否則容易出現(xiàn)亂碼的。

總結(jié)

以上是生活随笔為你收集整理的pythonjson中list操作_python3中json与JsonPath用法详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。