将json数组解析为Python列表

jui*_*0xk 1 arrays json list python-2.7

我已经创建了自己的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"
   }
  }
]
Run Code Online (Sandbox Code Playgroud)

我的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']]
Run Code Online (Sandbox Code Playgroud)

上面的代码段不起作用,因为它会产生list indices must be integers, not str错误.

我做错了什么,如何正确解析我的json数组到python列表?

use*_*559 6

问题是你的JSON"对象"是一个列表,但是你试着用string(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']]
Run Code Online (Sandbox Code Playgroud)

编辑

可能更清晰/更容易?

camera_details = [
    [
        cameras["front"],
        cameras["rear"],
        cameras["left"],
        cameras["right"],
        cameras["inside"],
    ]
    for cameras in [item["cameras"] for item in json_array]
]
Run Code Online (Sandbox Code Playgroud)