【问题标题】:Convert json list to string将json列表转换为字符串
【发布时间】:2019-04-01 17:55:19
【问题描述】:

我有一个这样的 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

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

【问题讨论】:

  • hey 是什么?
  • mask_json 和 vgg_json 引用同一个字典。
  • 对不起,'hey'只是为了检查错误是否相同,代码未修复,是str(i),无论如何都会给出相同的错误。

标签: python arrays json


【解决方案1】:

所以,我认为发生的事情是,当您尝试将带有字符串键的值分配给列表 (mask_json[key]['regions']['hey']=shape_attr) 时。正如 Python 有帮助地指出的那样,你不能这样做。这是你的代码,修改了几行来做我认为你想做的事情:

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

  for key in vgg_json:
    copy = {}  # make a dict to hold the values you want
    i=0
    for shape_attr in vgg_json[key]['regions']:
      copy[f'{i}']=shape_attr  # note that I'm using i here, rather than 'hey'
      i+=1
    mask_json[key]['regions'] = copy  # Replace what was in regions with the new dict we created
  f.seek(0)       
  json.dump(mask_json, f, indent=4)
  f.truncate()

【讨论】:

    【解决方案2】:

    您需要复制每个子字典,但将 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)
    

    【讨论】:

      猜你喜欢
      • 2020-05-23
      • 1970-01-01
      • 2013-10-29
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多