Python中JSON結構數據的高效增刪改操作

2021-12-19 Python大數據分析

收錄於話題 #Python小工具 5個內容

添加微信號"CNFeffery"加入技術交流群

本文示例代碼及文件已上傳至我的Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes

❞1 簡介

在上一期文章中我們一起學習了在Python中如何使用jsonpath庫,對JSON格式數據結構進行常規的節點條件查詢,可以滿足日常許多的數據處理需求。

而在上一期結尾處,我提到了還有其他JSONPath功能相關的進階Python庫,在今天的文章中,我就將帶大家學習更加高級的JSON數據處理方式。

2 基於jsonpath-ng的進階JSON數據處理方法

jsonpath-ng是一個功能強大的Python庫,它整合了jsonpath-rw、jsonpath-rw-ext等第三方JSONPath拓展庫的實用功能,使得我們可以基於JSONPath語法,實現更多操縱JSON數據的功能,而不只是查詢數據而已,使用pip install jsonpath-ng進行安裝:

2.1 JSON數據的增刪改

jsonpath-ng中設計了一些方法,可以幫助我們實現對現有JSON數據的增刪改操作,首先我們來學習jsonpath-ng中如何定義JSONPath模式,並將其運用到對數據的匹配上,依然以上篇文章的數據為例:

import json
from jsonpath_ng import parse

# 讀入示例json數據
with open('json示例.json', encoding='utf-8') as j:
    demo_json = json.loads(j.read())
    
# 構造指定JSONPath模式對應的解析器
parser = parse('$..paths..steps[*].duration')

# 利用解析器的find方法找到目標數據中所有滿足條件的節點
matches = parser.find(demo_json)

# 利用value屬性取得對應匹配結果的值
matches[0].value

而基於上面產生的一些對象我們就可以實現對JSON數據的增刪改:

2.1.1 對JSON數據進行增操作

在jsonpath-ng中對JSON數據添加節點,思想是先構造對「原先不存在」的節點進行匹配的解析器對象,利用find_or_create方法處理原始JSON數據:

# 構造示例數據
demo_json = {
    'level1': [
        {
            'level2': {}
        },
        {
            'level2': {
                'level3': 12
            }
        }
    ]
}

# 構造規則解釋器,所有除去最後一層節點規則外可以匹配到的節點
# 都屬於合法匹配結果,會在匹配結果列表中出現
parser = parse('level1[*].level2.level3')

matches = parser.find_or_create(demo_json)

demo_json

在find_or_create操作之後,demo_json就被修改成下面的結果:

接下來的事情就很簡單了,只需要在matches結果中進行遍歷,遇到value屬性為{}的,就運用full_path.update_or_create()方法對原始JSON數據進行更新即可,比如這裡我們填充999:

for match in matches:
    if match.value == {}:
        # 更新原始輸入的JSON數據
        match.full_path.update_or_create(demo_json, 999)

demo_json

2.1.2  對JSON數據進行刪操作

當我們希望對JSON數據中指定JSONPath規則的節點予以刪除時,可以使用到parse對象的filter()方法傳入lambda函數,在lambda函數中進行條件判斷,返回的即為刪除指定節點之後的輸入數據。

以上一步「增」操作後得到的demo_json為例,我們來對其level1[*].level2.level3值為999的予以過濾:

parser = parse('level1[*].level2.level3')

# 過濾 level1[*].level2.level3 規則下值為 999 的節點
parser.filter(lambda x: x == 999, demo_json)
demo_json

可以看到結果正是我們所預期的:

2.1.3 對JSON數據進行改操作

對JSON數據中的指定節點進行改操作非常的簡單,只需要使用parse對象的update或update_or_create方法即可,使用效果的區別如下所示,輕輕鬆鬆就可以完成兩種策略下的節點更新操作😋:

jsonpath-ng中還有一些豐富的功能,這裡就不再贅述,感興趣的讀者朋友可以前往https://github.com/h2non/jsonpath-ng查看。

以上就是本文的全部內容,歡迎在評論區與我進行討論~

加入知識星球【我們談論數據科學】

400+小夥伴一起學習!

· 推薦閱讀 ·

在Python中操縱json數據的最佳方式

Python Dash 一個可以玩轉AI的可視化利器

使用Python輕鬆獲取股票&基金數據


相關焦點

  • Python 讀取 JSON 數據的騷操作
    json 模塊提供了一種很簡單的方式來編碼和解碼 JSON 數據。其中兩個主要的函數是 json.dumps() 和 json.loads() 下面演示如何將一個 Python 數據結構轉換為 JSONimport jsondata = {'name' : 'ACME','shares' : 100,'price' : 542.23}json_str = json.dumps(data)下面演示如何將一個
  • 用 Python 操作 JSON 類型數據詳解
    這些特性使JSON成為理想的數據交換語言。JSON官方網站http:JSON是一種基於文本,獨立於語言的輕量級數據交換格式。JSON的基本語法如下:1、JSON名稱/值對。JSON 數據的書寫格式是:名稱/值對。名稱/值對包括欄位名稱(在雙引號中),然後著是一個冒號(:),最後是值。
  • 在python中處理JSON數據
    )print(type(data)) # <class 'dict'>數據來自 example.json 文件並存儲在名為 data 的字典中。 (data) # converting dictionary to JSONdata_dict = json.loads(JSON_string)print(data == data_dict) # True, since no tuples used我在介紹中已經提到,在構建自己的 Python 項目試圖獲得數據科學/機器學習工程師的工作時偶然發現了
  • Python3 JSON 數據解析 | Python JSON Parsing
    Python3 中可以使用 json 模塊來對 JSON 數據進行編解碼,它包含了兩個函數:在 json 的編解碼過程中,Python 的原始類型與 json 類型會相互轉換,具體的轉化對照如下:Python 編碼為 JSON 類型轉換對應表:PythonJSONdictobjectlist, tuplearraystrstringint, float, int- & float-derived
  • python對json的操作總結
    作者:loleina來源:http://www.cnblogs.com/loleina/p/5623968.htmlJson簡介:Json,全名 JavaScript Object Notation,是一種輕量級的數據交換格式。Json最廣泛的應用是作為AJAX中web伺服器和客戶端的通訊的數據格式。
  • 13-python爬蟲之JSON操作
    JSONJSON(JavaScript Object Notation) 是一種輕量級的數據交換格式;適用於進行數據交互的場景,比如網站前臺與後臺之間的數據交互Python 3.x中自帶了JSON模塊,直接import json就可以使用了。
  • 數據提取之JSON與JsonPATH
    簡介    json簡單說就是javascript中的對象和數組,所以這兩種結構就是對象和數組兩種結構,通過這兩種結構可以表示各種複雜的結構;對象:對象在js中表示為{ }括起來的內容,數據結構為 { key:value, key:value, ... }的鍵值對的結構,在面向對象的語言中,key為對象的屬性,value為對應的屬性值,所以很容易理解,取值方法為 對象.key 獲取屬性值,這個屬性值的類型可以是數字、字符串、數組、對象這幾種。
  • 在Python裡玩轉JSON數據
    今天我們要講一講,如何在 Python 中處理JSON數據。 json.dumps() 是將 python 對象轉化為 json。json.loads() 是將 json 轉化為 python 對象。隨後又通過 json.loads(),重新將json格式字符串轉換成字典。在實際應用中,要提取json數據,就要了解返回json數據的結構。可是Json格式的數據往往是這樣的。
  • python處理JSON數據
    因此,json的應用日趨廣泛。python內置的字典格式,和json格式基本相同,可以看出,python天生就對json數據比較友好。今天我們來介紹python對json數據的處理。JSON字符串和python字典對於一個字典,我們可以用json.dumps()方法來將其轉化為字符串。
  • Python處理JSON數據,建議收藏!
    詳細的學習資料見官網:https://docs.python.org/3/library/json.html首先使用的時候直接導入該包:import jsonjson包中存在4中方法用來進行和Python內置數據類型的轉化:方法作用json.dumps()將python對象編碼成Json字符串:字典到jsonjson.loads()將
  • 如何利用Python處理JSON格式的數據,建議收藏!!!
    數據分析與籃球JSON數據格式在我們的日常工作中經常會接觸到,無論是做爬蟲開發還是一般的數據分析處理,今天,小編就來分享一下當數據接口是JSON格式時,如何進行數據處理進行詳細的介紹,內容分布如下JSON(JavaScript Object Notation, JS對象簡譜)是一種輕量級的數據交換格式,通常是以鍵值對的方式呈現,其簡潔和清晰的層次結構使得
  • Python 標準庫之 JSON
    關於 JSON 更為詳細的內容,可以參考其官方網站,在這我截取部分內容,讓大家更好的了解一下 JSON 的結構。JSON 構建於兩種結構基礎之上:Python 標準庫中有 JSON 模塊,主要是執行序列化和反序列化功能。
  • 乾貨|如何利用Python處理JSON格式的數據,建議收藏!
    , JS對象簡譜)是一種輕量級的數據交換格式,通常是以鍵值對的方式呈現,其簡潔和清晰的層次結構使得JSON成為理想的數據交換語言,而在Python中處理JSON格式的模塊有json和pickle兩個json模塊和pickle都提供了四個方法:dumps, dump, loads, load
  • 不服不行,Python 操作 JSON 的門道也這麼多~
    詳細的學習資料見官網:https://docs.python.org/3/library/json.html首先使用的時候直接導入該包:import jsonjson包中存在4中方法用來進行和Python內置數據類型的轉化:方法作用json.dumps()將python對象編碼成Json字符串:字典到jsonjson.loads()將
  • 4個小竅門,讓你在Python中高效使用JSON!
    可通過以下方式導入:import json解碼JSON字符串很簡單,直接輸入 json.loads(…) 即可。它可以轉換成:· 字典對象· 列表數組· 識別布爾值、整數、浮點數和字符串,在Python中進行正確轉換。
  • python如何編碼解碼解析json對象
    前言json是一種以鍵值對形式存在的輕量級的數據結構,和python中的字典類型具有相同的表現結構。使用 JSON 函數需要導入 json 庫:import json。在Java中我們知道json有jsonObject和jsonArray,且可以通過String、map等相互轉換,那麼在python中,json對象是如何來讀取解析的呢?python解析json對象1.json.dumpsjson.dumps用於將 Python 對象編碼成 JSON 字符串。
  • 在Python中操縱json數據的最佳方式
    ❝本文示例代碼及文件已上傳至我的Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes❞1 簡介在日常使用Python的過程中,我們經常會與json格式的數據打交道,尤其是那種嵌套結構複雜的json數據,從中抽取複雜結構下鍵值對數據的過程枯燥且費事。
  • 一網打盡Python中4大數據結構
    具體到python中數據結構的選擇運用,雖然有很多類型可供選擇:除了基本的列表、字典、集合和元組4個基本類型外,collections模塊中提供了很多定製化的數據結構,還有專用的堆heapq和枚舉enum等。誠然,特定數據結構在某些應用場景下可能有神奇的效果,但把基礎數據類型用到極致也可堪稱是絕招。
  • Python處理json總結
    JSON 數據的書寫格式是:名稱/值對。名稱/值對包括欄位名稱(在雙引號中),然後著是一個冒號(:),最後是值。跟python中的字典看起來很像,兩者之間的區別?1)json的key只能是字符串,dict的key可以是任何可hash的對象,例如:字符串、數字、元組等;2)字典是一種數據結構,json是一種數據格式;字典有很多內置函數,有多種調用方法,而json是數據打包的一種格式,並不像字典具備操作性;3)json的字符串強制用雙引號,dict的字符串可以用單引號、雙引號;一般而言,我們會把json轉化為python
  • python接口自動化5-Json數據處理
    一般常見的接口返回數據也是json格式的,我們在做判斷時候,往往只需要提取其中幾個關鍵的參數就行,這時候就需要json來解析返回的數據了。一、json模塊簡介1.Json簡介:Json,全名 JavaScript Object Notation,是一種輕量級的數據交換格式,常用於http請求中2.可以用help(json),查看對應的源碼注釋內容