如何使用python处理JSON嵌套列表

时间:2019-06-19 18:20:27

标签: python json coco

我正在训练掩码rcnn上的数据集。我已经在labelIMG工具(https://github.com/tzutalin/labelImg)上注释了大约1500张图像。

长话短说,我需要从JSON文件中的细分列表中获取x和y坐标的值。

如何使用Python编程访问列表? 或者还有其他方法可以在遮罩Rcnn上使用.xml注释。

这是从VOC PASCAL转换为COCO的数据集。 Xml被转换为JSON语法。

代码

import json
import codecs

data = json.load(codecs.open('example.json', 'r', 'utf-8-sig'))

for i in data['annotations']:
    print(data['annotations'][0]) #want to output segmentation values in JSON files

JSON文件

{
    "images": [
        {
          "file_name": "out538.png",
          "height": 720,
          "id": 20180000001,
          "width": 1280
        },
        {
          "file_name": "3 0751.jpg",
          "height": 720,
          "id": 20180000002,
          "width": 1280
        }
    ],
    "type": "instances",
    "annotations": [
        {
            "segmentation": [
            [
                935,
                372,
                935,
                554,
                1195,
                554,
                1195,
                372
            ]
            ],
            "area": 47320,
            "iscrowd": 0,
            "ignore": 0,
            "image_id": 20180000001,
            "bbox": [
            935,
            372,
            260,
            182
            ],
            "category_id": 1,
            "id": 1
        },
        {
            "segmentation": [
            [
                743,
                317,
                743,
                480,
                962,
                480,
                962,
                317
            ]
            ],
            "area": 35697,
            "iscrowd": 0,
            "ignore": 0,
            "image_id": 20180000001,
            "bbox": [
            743,
            317,
            219,
            163
            ],
            "category_id": 1,
            "id": 2
        }
    ],
    "categories": [
      {
        "supercategory": "none",
        "id": 1,
        "name": "bike"
      },
      {
        "supercategory": "none",
        "id": 2,
        "name": "Bike"
      }
    ]

}

我想要细分列表的值:例如935,                 372,                 935,                 554,                 1195年,                 554,                 1195年,                 372 但我得到的只是错误“列表索引必须是整数或切片,而不是字典”

2 个答案:

答案 0 :(得分:0)

JSON是... dicts的字典 因此,您需要正确的键才能一直导航到细分。

annotations[0]['segmentation'] 

应该给您列表

答案 1 :(得分:0)

i循环中的for i in data['annotations']:变量将是字典,因为annotations是词典列表。为了访问segmentation列表,您需要执行以下操作:

for annotation in data['annotations']:
    segmentation = annotation['segmentation']
    actual_segment_data = segmentation[0]

最后一行代码是必需的,因为segmentation是列表中的列表。

这应该返回以下内容:[935, 372, 935, 554, 1195, 554, 1195, 372]