簡體   English   中英

從JSON文件中選擇特定字段-Python

[英]Select Specific Fields From JSON File - Python

我正在嘗試比較兩個json文件。 一個是json.dump,另一個是傳入該方法的新json對象。

我們使用來自服務器的測試結果生成一個JSON文件,然后將它們傳遞到此方法中:

def save_json_results(data):
    if not os.listdir('/opt/Code/JSON'):
        with open('/opt/Code/JSON/current_json.json','w') as outfile:
        json.dump(data,outfile)
        send_json_results(data)
    else:
        f = open('/opt/Code/JSON/current_json.json')
        file_data = json.loads(f)
        d = json.loads(data)
        if sorted(file_data.items()) == sorted(d.items()) and file_data.get("timestamp",{}) != d.get("timestamp",{}):
            with open('/opt/Code/JSON/current_json.json','w') as outfile:
                json.dump(data,outfile)
        else:
            os.rename('/opt/Code/JSON/current_json.json','/opt/cfm_health_checks/Code/JSON/prev_json.json')
            with open('/opt/Code/JSON/current_json.json','w') as outfile:
                json.dump(data,outfile)
            send_json_results(data)

此方法的前提是獲取傳入的(數據)JSON對象,然后檢查目錄是否為空,然后將該文件存儲為最新的JSON,否則它將嘗試打開文件。已經存在(假設我必須將其重新加載為JSON對象,這可能是錯誤的),然后嘗試比較文件,如果它們相同且只有時間戳不同,則不要將JSON發送到數據庫(因為它只是浪費網絡資源,因為關於測試結果的信息沒有不同),但是它仍將使新數據=最新的JSON,否則會將其發送到數據庫並相應地重命名文件。

{
"acronym": "", 
"api": [], 
"cell_version": "", 
"cfm": [], 
"city": "Belfast", 
"country": "UK", 
"latitude": 54.614443, 
"longitude": -5.899953, 
"nas": [], 
"node": [], 
"number_of_cells": "", 
"switch": [], 
"timestamp": "2015-01-19 15:04:13.489097"
}

上面的示例JSON。

dfile_data通過返回的對象json.loads應該有標准的Python字典接口。

因此,您應該能夠使用d["acronym"]訪問d的首字母縮寫值。

您還可以for keyvaluepair in file_data.items():遍歷每個JSON條目,並根據鍵名將單獨的比較應用於每個鍵值對。

[d[k[0]] for k in sorted(d.items()) if k[0] != "timestamp"] == [file_data[k[0]] for k in sorted(file_data.items()) if k[0] != "timestamp"][d[k[0]] for k in sorted(d.items()) if k[0] != "timestamp"] == [file_data[k[0]] for k in sorted(file_data.items()) if k[0] != "timestamp"]雖然那是很長的一行,但我個人不會讓它經過代碼審查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM