2017-06-23 137 views
0

我已經創建了我自己的json數據與我想解析成python列表的數組。不過,我一直有這個麻煩。解析json數組到Python列表

如何將json數組提取到python列表中?

JSON數據:

[ 
    { 
    "ip": "192.168.241.109", 
    "cameras": 
     { 
      "front": "nf091", 
      "inside": "nf067", 
      "right": "004317", 
      "rear": "000189", 
      "left": "nf084" 
     } 
    }, 
    { 
    "ip": "192.168.241.110",   
    "cameras": 
    { 
      "front": "nf091", 
      "inside": "nf067", 
      "right": "004317", 
      "rear": "000189", 
      "left": "nf084" 
    } 
    } 
] 

我的JSON數據是有效的,所以我不知道爲什麼我在與下面的代碼的麻煩:

system_json = open(json_file) 
json_obj = json.load(system_json) 

camera_details = [[i['front'], i['rear'], i['left'], i['right'], i['inside']] for i in json_obj['cameras']] 

上面的代碼片斷不因爲它會產生list indices must be integers, not str錯誤。

我在做什麼錯,我該如何正確解析我的json數組到python列表中?

回答

4

問題是你的JSON「對象」是一個列表,但是你嘗試用一個字符串(json_obj['cameras'])索引它。

你有什麼是一個JSON數組,其中的每個元素是一個包含(除別的之外)一個名爲"cameras"的鍵的字典。我相信這個代碼你想要做什麼:

import json 

text = """[{"ip": "192.168.241.109", "cameras": {"front": "nf091", "inside": "nf067", "right": "004317", "rear": "000189", "left": "nf084"}}, {"ip": "192.168.241.110", "cameras": {"front": "nf091", "inside": "nf067", "right": "004317", "rear": "000189", "left": "nf084"}}]""" 

json_array = json.loads(text) 

camera_details = [[i['cameras']['front'], i['cameras']['rear'], i['cameras']['left'], i['cameras']['right'], i['cameras']['inside']] for i in json_array] 
print(camera_details) 

# Output: 
# [['nf091', '000189', 'nf084', '004317', 'nf067'], ['nf091', '000189', 'nf084', '004317', 'nf067']] 

編輯

可能更清晰/更容易?

camera_details = [ 
    [ 
     cameras["front"], 
     cameras["rear"], 
     cameras["left"], 
     cameras["right"], 
     cameras["inside"], 
    ] 
    for cameras in [item["cameras"] for item in json_array] 
]