在python中读取json文件时遇到麻烦

时间:2017-08-14 08:14:06

标签: python json list dictionary

我有一个如下所示的json文件:

[
 {
  "image_path": "train640x480/2d4_2.bmp",
  "rects": [
   {
    "y2": 152.9,
    "y1": 21.2,
    "x2": 567.3,
    "x1": 410.8
   }
  ]
 },
 {
  "image_path": "train640x480/1dd_1.bmp",
  "rects": [
   {
    "y2": 175.1,
    "y1": 74.7,
    "x2": 483.8,
    "x1": 230.8
   }
  ]
 }
]

当我这样做时

H = {}
with open('train.json', 'r') as json_data:
        H = json.load(json_data)
    print(H)

打印出this

如何访问每张图片的矩形值?我试过了

H['image_path:'][os.path.join(directory, filename)]

但返回

TypeError: list indices must be integers or slices, not str

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:3)

您的json文件包含 词典列表,这意味着您首先需要遍历列表,然后才能访问词典的内容。

e.g。

for items in H:
    if items['image_path'] == os.path.join(directory, filename):
        print items['rects']

如果您的json看起来像这样,您就可以像预期的那样访问条目。

{
    "train640x480/2d4_2.bmp":
        {
            "rects": [
                {
                    "y2": 152.9,
                    "y1": 21.2,
                    "x2": 567.3,
                    "x1": 410.8

                }
            ]
        },

    "train640x480/1dd_1.bmp":
        {
            "rects": [
                {
                    "y2": 175.1,
                    "y1": 74.7,
                    "x2": 483.8,
                    "x1": 230.8
                }
            ]
        }
}

e.g。

print H['train640x480/2d4_2.bmp']['rects]

答案 1 :(得分:0)

您应首先将一个数字作为索引来访问第一个列表。您的json数据被构造为列表然后字典然后列出顶点的字典。您的查询应该是

2016

H[0]["rects"][0] # the fist rectangle dictionary

答案 2 :(得分:0)

试试此代码

print H[0]["image_path"]
print H[0]["rects"][0]["y2"]


print H[1]["image_path"]
print H[1]["rects"][0]["y2"]