2016-11-21 113 views
-3

我試圖應對JSON字典,看起來像以下:解析JSON字典具有未知值

{ 
    "Parameters": { 
     "IP": "192.168.1.40", 
     "TIMEOUT": 900, 
     "mode": 0 
    }, 

    "Device": { 
     "sector01": { 
      "nodes": ["node01", "node02"] 
     }, 
     "sector02": { 
      "nodes": ["node01"] 
     }, 
     "sector03": { 
      "nodes": ["node01","node02","node03"]  
     } 
    } 
} 

假設我對沒有資料許多部門和節點如何存在,我想知道扇區的數量(以及每扇區有多少個節點)。 我能夠找到的總扇區號:

len(data["Device"]) 

但是,每個扇區節點的總沒有在我的情況更重要。

+2

所以,你想要在Device中的每個地圖的節點值的長度求和?什麼阻止你這樣做? – jonrsharpe

+0

這看起來像是對字典的工作原理缺乏瞭解。試試:'len(data [「Device」] [「sector03」] [「nodes」])' – TehTris

+0

使用'for-loop'來獲取扇區(一個接一個),而且你不必知道有多少您可以使用stectors(),然後您可以在扇區中獲得'「nodes」來檢查它的len()' – furas

回答

1

您可以使用for-loop讓每一個「部門」(這不要緊,你有多少部門),然後就可以在部門得到「節點」,並檢查len()

for key, val in data['Device'].items(): 
    print(key, len(val["nodes"])) 
0
import json 

your_json = """{ 
     "Parameters": { 
      "IP": "192.168.1.40", 
      "TIMEOUT": 900, 
      "mode": 0 
     }, 

     "Device": { 
      "sector01": { 
       "nodes": ["node01", "node02"] 
      }, 
      "sector02": { 
       "nodes": ["node01"] 
      }, 
      "sector03": { 
       "nodes": ["node01","node02","node03"]  
      } 
     } 
    }""" 

your_dict = json.loads(your_json) 
len_of_device = len(your_dict['Device']) 
dict_len_of_sectors = {} 
for key in your_dict['Device']: 
    dict_len_of_sectors[key] = len(your_dict['Device'][key]['nodes']) 

print(str(dict_len_of_sectors)) 

我建議在這裏研究: https://docs.python.org/3/library/stdtypes.html?highlight=dict#dict