首页 > 解决方案 > 将json列表转换为字符串

问题描述

我有一个这样的 json,取自 vgg 图像注释器。

"5213c8b86f225.image.jpg40172": {
"filename": "5213c8b86f225.image.jpg",
"regions": [{(...)},
            {(...)}]
}

我想将此 json 转换为掩码 rcnn 的格式,如下所示:

"5213c8b86f225.image.jpg40172":{
  "filename":"24631331976_defa3bb61f_k.jpg",
  "regions":{
     "0":{(...)},
     "1":{(...)},
      (...)}
  }

我尝试了以下代码:

with open(val_json, 'r+') as f:
  vgg_json = json.load(f)
  mask_json =vgg_json

  for key in vgg_json:
    i=0
    for shape_attr in vgg_json[key]['regions']:
      mask_json[key]['regions'][str(i)]=shape_attr
      i+=1
  f.seek(0)       
  json.dump(mask_json, f, indent=4)
  f.truncate()     

它不起作用并给我以下错误:

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

整个 json 文件在这里: https ://github.com/fabioaraujopt/maskrcnn_custom/blob/master/via_region_data.json

抱歉,“嘿”只是我的测试没有意识到!真正的价值现在改变了!

标签: pythonarraysjson

解决方案


您需要复制每个子字典,但regions用字典替换

with open(val_json) as f:
    vgg_json = json.load(f)

mask_json = {
    k: dict(v, regions=dict(enumerate(v['regions']))
    for k, v in vgg_json.items()
}

with open(val_json, 'w') as f:
    json.dump(mask_json, f, indent=4)

推荐阅读