在 python 中创建动态 json 对象

Create dynamic json object in python

我有一个包含多个键和值的字典,值也包含键值对。我不知道如何在 python 中使用此词典创建动态 json。这是词典:

image_dict = {"IMAGE_1":{"img0":"IMAGE_2","img1":"IMAGE_3","img2":"IMAGE_4"},"IMAGE_2":{"img0":"IMAGE_1", "img1" : "IMAGE_3"},"IMAGE_3":{"img0":"IMAGE_1", "img1":"IMAGE_2"},"IMAGE_4":{"img0":"IMAGE_1"}}  

我的预期结果是这样的:

{
  "data": [
    {
      "image": {
        "imageId": {
          "id": "IMAGE_1"
        },
        "link": {
          "target": {
            "id": "IMAGE_2"
          },
          "target": {
            "id": "IMAGE_3"
          },
          "target": {
            "id": "IMAGE_4"
          }
        }
      },
      "updateData": "link"
    },
       {
      "image": {
        "imageId": {
          "id": "IMAGE_2"
        },
        "link": {
          "target": {
            "id": "IMAGE_1"  
          },
          "target": {
            "id": "IMAGE_3"  
          }
        }
      },
      "updateData": "link"
    },
    {
      "image": {
        "imageId": {
          "id": "IMAGE_3"
        },
        "link": {
          "target": {
            "id": "IMAGE_1"  
          },
          "target": {
            "id": "IMAGE_2"  
          }
        }
      },
      "updateData": "link"
    } ,
    {
      "image": {
        "imageId": {
          "id": "IMAGE_4"
        },
        "link": {
          "target": {
            "id": "IMAGE_1"  
          }
        }
      },
      "updateData": "link"
    } 
  ]
}  

我试图解决它,但没有得到预期的结果。

result = {"data":[]}

for k,v in sorted(image_dict.items()):
    for a in sorted(v.values()):
        result["data"].append({"image":{"imageId":{"id": k},
                                        "link":{"target":{"id": a}}},"updateData": "link"})
print(json.dumps(result, indent=4))

在 Python 词典中,不能有 2 个值具有相同的键。所以你不能有多个目标都叫 "target"。所以你可以索引它们。我也不知道这个问题与动态对象有什么关系,但这是我开始工作的代码:

import re
dict_res = {}
ind = 0
for image in image_dict:
    lin_ind = 0
    sub_dict = {'image' + str(ind): {'imageId': {image}, 'link': {}}}
    for sub in image_dict[image].values():
        sub_dict['image' + str(ind)]['link'].update({'target' + str(lin_ind): {'id': sub}})
        lin_ind += 1
    dict_res.update(sub_dict)
    ind += 1
dict_res = re.sub('target\d', 'target', re.sub('image\d', 'image', str(dict_res)))
print dict_res