最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在python中使用Json提取數(shù)據(jù)的詳細(xì)過程

 更新時間:2025年08月01日 10:32:19   作者:cliff,  
在Python中從JSON數(shù)據(jù)中取值是一個常見的操作,這篇文章主要介紹了在python中使用Json提取數(shù)據(jù)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、前言

官方文檔:https://docs.python.org/zh-cn/3.12/library/json.html

在Python中,json模塊可以方便地處理JSON數(shù)據(jù)與Python對象之間的轉(zhuǎn)換。然而,如果僅用json模塊來提取特定數(shù)據(jù),就有點(diǎn)力不從心了,這時可以使用JSONPath模塊,但它的操作稍顯復(fù)雜,那么JMESPath模塊就是不錯的選擇

二、格式轉(zhuǎn)換

python的json模塊用于處理Json數(shù)據(jù),Json字符串與python類型之間的轉(zhuǎn)換關(guān)系如下圖所示:

2.1 dumps函數(shù)

函數(shù)格式:json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

參數(shù)解析:以下是一些常用的參數(shù),更多參數(shù)參考:https://docs.python.org/zh-cn/3/library/json.html#basic-usage

常用參數(shù)描述
indent美化輸出
ensure_asciiFalse時可保留非ASCII字符(如中文)
sort_keys為True時按鍵名排序輸出

使用示例:

import json
mydict={'name':'張三','age':15}
json_str = json.dumps(mydict, indent=2, ensure_ascii=False)
print(json_str)
print(type(json_str))    # <class 'str'>

2.2 loads函數(shù)

函數(shù)格式:json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)</font>**

具體參數(shù)參考:https://docs.python.org/zh-cn/3/library/json.html#basic-usage

使用示例:以百度翻譯為例

import json
import requests

url = "https://fanyi.baidu.com/sug"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.78"
}
data = {
    "kw": "face to face"
}
response = requests.post(url=url, data=data, headers=headers)

result = json.loads(response.text)
# result = response.json()
for item in result["data"]:
    print(item["k"], item["v"])

2.3 錯誤處理

捕獲JSON解析錯誤:exception json.JSONDecodeError(msg, doc, pos)JSONDecodeErrormsg錯誤信息、doc正在解析的JSON文檔、pos文檔中解析失敗的起始位置索引等屬性。

try:
    data = json.loads(invalid_json_str)
except json.JSONDecodeError as e:
    print(f"解析失敗: {e}")

三、JSONPath模塊

官方文檔:https://goessner.net/articles/JsonPath/

JSONPath模塊可以對JSON 數(shù)據(jù)快速提取,安裝:pip install jsonpath-ng

他與XPath語法相似:

以下面數(shù)據(jù)為例:

{ "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
    }
  }
}

使用JSONPath獲取數(shù)據(jù):

代碼實(shí)現(xiàn)

from jsonpath_ng import parse

# 定義 JSONPath 表達(dá)式
expr = parse("$.store.book[*].title")

# 提取數(shù)據(jù)
matches = [match.value for match in expr.find(data)]
print(matches)  
# 輸出: ['Sayings of the Century', 'Sword of Honour', 'Moby Dick', 'The Lord of the Rings']

四、JMESPath模塊

官方文檔:https://jmespath.org/tutorial.html

相比于JSONPath,JMESPath語法更簡潔,性能更好,安裝:pip install jmespath

根據(jù)上述例子,則有:

import jmespath

# 提取所有書籍標(biāo)題
result = jmespath.search("store.book[*].title", data)
print(result)  
# 輸出: ['Sayings of the Century', 'Sword of Honour', 'Moby Dick', 'The Lord of the Rings']

具體使用參見下文

4.1 search函數(shù)

jmespath.search是 JMESPath 庫的核心函數(shù),用于在 JSON 數(shù)據(jù)中執(zhí)行查詢表達(dá)式并返回匹配結(jié)果,格式為jmespath.search(expression, data),更多參考https://jmespath.org/specification.html

expression:JMESPath 查詢字符串(如 "users[*].name"

data:待查詢的 JSON 數(shù)據(jù)(Python 字典或列表)

查詢成功則返回匹配的數(shù)據(jù),否則返回None

對于要重復(fù)執(zhí)行的查詢,可以預(yù)編譯

from jmespath import compile as jmes_compile

# 預(yù)編譯表達(dá)式
expr = jmes_compile("users[*].name")

# 多次使用編譯后的表達(dá)式
result1 = expr.search(data1)
result2 = expr.search(data2)

在錯誤處理上,可以用try-except捕獲jmespath.exceptions.JMESPathError

try:
    result = jmespath.search("invalid.expression[", data)
except jmespath.exceptions.JMESPathError as e:
    print(f"表達(dá)式錯誤: {e}")

4.2 基本語法

4.2.1 基本查詢

基本表達(dá)式:JSON對象中的一個鍵,如果不存在則返回null

相應(yīng)的代碼實(shí)現(xiàn):

#自定義環(huán)境 library/python:3.9-slim-top1000
import jmespath

data = {"a": "foo", "b": "bar", "c": "baz"}

result = jmespath.search("a", data)
print(result)  # 輸出: foo

支持索引訪問,從0開始,也支持負(fù)索引(從列表末尾開始索引)

使用.訪問子節(jié)點(diǎn):

支持切片,與python的切片類似,格式為[start:stop:step]

4.2.2 投影

投影,是jmespath的一個關(guān)鍵特性,允許將一個表達(dá)式應(yīng)用于一組元素,有五種類型:

  1. List Projections:列表投影
  2. Slice Projections:切片投影
  3. Object Projections:對象投影
  4. Flatten Projections:平坦投影
  5. Filter Projections:過濾投影

列表投影:僅適用于列表,*用來匹配列表中所有元素或?qū)ο蟮乃墟I;[]用于列表投影,類似于SQL中的SELECT

{"missing": "different"} 在應(yīng)用表達(dá)式first時評估為null,并且null值不會被添加到收集結(jié)果數(shù)組中

也可以提取多個字段組成多個列表

切片投影:與列表投影幾乎相同,區(qū)別在于左側(cè)是切片評估的結(jié)果,

對象投影:從對象中提取多個字段,生成新的字典或列表

展平投影:將嵌套的列表結(jié)構(gòu)轉(zhuǎn)換為單層列表,便于處理多層嵌套數(shù)據(jù),列表[]將嵌套列表展平,通常結(jié)合*使用

如果元素不是列表,展平操作會忽略它

過濾投影:使用過濾表達(dá)式[?條件]實(shí)現(xiàn)更精準(zhǔn)的數(shù)據(jù)提取,過濾表達(dá)式支持比較運(yùn)算符(==!=、<、<=>、>=)、邏輯運(yùn)算符

4.2.3 管道

使用管道表達(dá)式<expression> | <expression>來表示投影必須停止。當(dāng)遇到管道符時,該點(diǎn)之前的結(jié)果會被傳遞給管道表達(dá)式的右側(cè)

4.2.4 多選

同時提取多個字段,返回字典或列表;多選與投影不同,即使表達(dá)式結(jié)果為空,也會包含在內(nèi)

  1. 哈希多選:{key1: expr1, key2: expr2}

  2. 列表多選:[expr1, expr2]

4.2.5 函數(shù)

支持函數(shù)表達(dá)式,更多參考:https://jmespath.org/specification.html#functions

常用函數(shù)描述
length()計(jì)算長度(字符串、列表、字典)
keys()/values()獲取字典的鍵或值
sort()排序列表
join()連接字符串列表
to_array()/to_object()轉(zhuǎn)換類型

總結(jié) 

到此這篇關(guān)于在python中使用Json提取數(shù)據(jù)的文章就介紹到這了,更多相關(guān)python用Json提取數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Python編寫windows電腦用戶操作記錄查看器

    基于Python編寫windows電腦用戶操作記錄查看器

    這篇文章主要為大家詳細(xì)介紹了如何基于Python編寫一個windows電腦用戶操作記錄查看器,可以讀取系統(tǒng)現(xiàn)有的日志記錄用戶,感興趣的小伙伴可以了解下
    2025-02-02
  • python使用in操作符時元組和數(shù)組的區(qū)別分析

    python使用in操作符時元組和數(shù)組的區(qū)別分析

    有時候要判斷一個數(shù)是否在一個序列里面,這時就會用到in運(yùn)算符來判斷成員資格,如果條件為真時,就會返回true,條件為假時,返回一個flase。這樣的運(yùn)算符叫做布爾運(yùn)算符,其真值叫做布爾值。
    2015-05-05
  • Django框架反向解析操作詳解

    Django框架反向解析操作詳解

    這篇文章主要介紹了Django框架反向解析操作,結(jié)合實(shí)例形式詳細(xì)分析了Django框架相關(guān)定義、原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • Python中作用域的深入講解

    Python中作用域的深入講解

    這篇文章主要給大家介紹了關(guān)于Python中作用域的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • python numpy.ndarray中如何將數(shù)據(jù)轉(zhuǎn)為int型

    python numpy.ndarray中如何將數(shù)據(jù)轉(zhuǎn)為int型

    這篇文章主要介紹了python numpy.ndarray中如何將數(shù)據(jù)轉(zhuǎn)為int型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python寫個喚醒睡眠電腦的腳本

    python寫個喚醒睡眠電腦的腳本

    這篇文章主要為大家詳細(xì)介紹了如何使用python寫個喚醒睡眠電腦的腳本,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • Python Literal 類型深度解析

    Python Literal 類型深度解析

    Literal 是Python類型提示系統(tǒng)中的特殊構(gòu)造,用于指示變量/參數(shù)/返回值必須取固定的字面量值之一,而非寬泛的類型范疇,文章介紹了Python中Literal類型提示的定義、語義特性、支持的類型、參數(shù)規(guī)則以及與Enum的區(qū)別,感興趣的朋友一起看看吧
    2026-04-04
  • python機(jī)器基礎(chǔ)邏輯回歸與非監(jiān)督學(xué)習(xí)

    python機(jī)器基礎(chǔ)邏輯回歸與非監(jiān)督學(xué)習(xí)

    這篇文章主要為大家介紹了python機(jī)器基礎(chǔ)邏輯回歸與非監(jiān)督的學(xué)習(xí)講解u,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • Python 中 f-Strings 的作用

    Python 中 f-Strings 的作用

    這篇文章主要介紹了Python 中 f-Strings 的作用, f-strings 是用來非常方便的格式化輸出的,覺得它的使用方法無外乎就是 print(f'value = { value }',其實(shí),f-strings 遠(yuǎn)超你的預(yù)期,今天來梳理一下它還能做那些很酷的事情
    2021-10-10
  • python2.7使用plotly繪制本地散點(diǎn)圖和折線圖

    python2.7使用plotly繪制本地散點(diǎn)圖和折線圖

    這篇文章主要為大家詳細(xì)介紹了python2.7使用plotly繪制本地散點(diǎn)圖和折線圖實(shí)例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04

最新評論

邓州市| 岳池县| 大渡口区| 志丹县| 如东县| 保靖县| 辽中县| 马山县| 临朐县| 时尚| 济源市| 开化县| 东阳市| 嫩江县| 新平| 定远县| 台南县| 二手房| 巢湖市| 华宁县| 密山市| 库伦旗| 辽源市| 闵行区| 七台河市| 土默特右旗| 乐都县| 宜春市| 崇明县| 全州县| 沁源县| 宁陵县| 英吉沙县| 芒康县| 武宣县| 阿瓦提县| 玉环县| 东明县| 丁青县| 凌源市| 民权县|