为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕神8447489 2022-03-09 20:11:41
我正在使用 mask rcnn 训练数据集。我在 labelIMG 工具 ( https://github.com/tzutalin/labelImg ) 上注释了大约 1500 张图像。长话短说,我需要从 JSON 文件中的分段列表中获取 x 和 y 坐标的值。如何使用 Python 编程访问列表?或者有没有其他方法可以在掩码 Rcnn 上使用 .xml 注释。这是从 VOC PASCAL 转换为 COCO 的数据集。Xml 被转换为 JSON 语法。代码import jsonimport codecsdata = 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 filesJSON文件{    "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        }    ],我想要分段列表的值:例如 935、372、935、554、1195、554、1195、372 但我得到的只是错误“列表索引必须是整数或切片,而不是字典”
查看完整描述

2 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

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


for annotation in data['annotations']:

    segmentation = annotation['segmentation']

    actual_segment_data = segmentation[0]

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


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


查看完整回答
反对 回复 2022-03-09
?
largeQ

TA贡献2039条经验 获得超7个赞

JSON 是 dict of ...dicts 的 dict 所以你需要正确的键来导航到段。

annotations[0]['segmentation']

应该给你名单


查看完整回答
反对 回复 2022-03-09
  • 2 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信