2017-07-30 40 views
2

我是新來的蟒蛇,我想達到以下查找重複的JSON使用python

{ 
    "items" : [ { 
    "hostId" : "ddcfbea6-8a7c-462c-38f9-0116338e438a", 
    "ipAddress" : "1.2.3.4", 
    "hostname" : "host.example.com", 
    "rackId" : "/rack01", 
    "hostUrl" : "http://host.example.com:7180/cmf/hostRedirect/ddcfbea6-8a7c-462c-38f9-0116338e438a" 
    } 
... 
} 

JSON可以包含數百個元素,我希望找到所有具有相同ipAddress條目值的元素並打印它們以及它們的鍵和值。 我該如何做到這一點?我使用請求模塊發送獲取請求。

+0

可能相關:https://stackoverflow.com/questions/17076345/remove-duplicates-from-json-data#17076552 –

+0

1)JSON是否有規則的結構?或者是任意結構的? 2)你知道你在找什麼IP嗎? –

+1

你想通過IP地址對數據進行分組,還是給它一些你想獲得與之相匹配的條目的地址? –

回答

2

名爲hosts JSON對象,

hosts = { 
    "items" : [ { 
    "hostId" : "ddcfbea6-8a7c-462c-38f9-0116338e438a", 
    "ipAddress" : "1.2.3.4", 
    "hostname" : "host.example.com", 
    "rackId" : "/rack01", 
    "hostUrl" : "http://host.example.com:7180/cmf/hostRedirect/ddcfbea6-8a7c-462c-38f9-0116338e438a" 
    } 
... 
} 

你可以把這些項目通過IP地址,這樣

grouped_items = {} 
for item in hosts["items"]: 
     ip_address = item["ipAddress"] 
     if ip_address in grouped_items: 
       grouped_items[ip_address].append(item) 
     else: 
       grouped_items[ip_address] = [item] 
0

您可以創建一個映射IP詞典地址的對象列表。例如(如果d就是你們的榜樣字典):

ipToObjects = {} 

for item in d['items']: 
    if 'ipAddress' not in item: 
     continue 
    ip = item['ipAddress'] 
    if ip not in ipToObjects: 
     ipToObjects[ip] = [] 
    ipToObject[ip].append(item) 

現在,如果你想尋找重複你可以這樣做:

duplicates = [ ip for ip in ipToObjects.keys() if len(ipToObjects) >1 ]  
for ip in duplicates: 
    print(ipToObjects[ip]) 

或者根據您的需要做類似的事情。