python 中的 for 循环迭代以获得嵌套 json 中的新值

for loop iteration in python for new value inside a nested json

这是我的第一个 post,尝试掌握 python 的窍门,将 api 后端设置为 mongodb(通过 mongoengine)。

我有这部分代码:

    def post(self) -> Response:
        data = request.get_json()
        post_list = Lists(**data).save()
        output = {'id': str(post_list.id)}
        return jsonify({'result': output})

其中我从前端收到一个 json ,存储到数据库中,一切正常。这是原始的 json:

{
   "listTitle":"hjhk",
   "listId":"873",
   "listCreator":"lotte",
   "sublist":[
      {
         "subListCreator":"lotte",
         "item":[
            {
               "itemTitle":"njkn",
               "itemContext":"None",
            },
            {
               "itemTitle":"njk",
               "itemContext":"None"
            },
            {
               "itemTitle":"vbvb",
               "itemContext":"None"
            }
         ]
      }
   ]
}

但是,我试图将一个 id 字段添加到结构中的最低数组,以指示该项目在子列表(1、2、3 等)中的位置。为此,我正在寻找合适的 for 循环。尝试了很多东西,这是我到目前为止最远的:

    def post(self) -> Response:
        data = request.get_json()
        for sublist in data['sublist']:
            for item in sublist['item']:
                if 'positionId' not in item:
                    item['positionId'] = 1
            item['positionId'] += 1
        post_list = Lists(**data).save()
        output = {'id': str(post_list.id)}
        return jsonify({'result': output})

导致:

{
   "listTitle":"dasdsa",
   "listId":"873",
   "listCreator":"lotte",
   "sublist":[
      {
         "subListCreator":"lotte",
         "item":[
            {
               "itemTitle":"dasd",
               "itemContext":"None",
               "positionId":1
            },
            {
               "itemTitle":"dsad",
               "itemContext":"None",
               "positionId":1
            },
            {
               "itemTitle":"dsadsa",
               "itemContext":"None",
               "positionId":2
            }
         ]
      }
   ]
}

我知道我做错了,我也用谷歌搜索了很多。找到了很多相关的东西,但对我来说没有任何意义。希望有人能够帮助我:)

此外,我还想添加一个与positionId系统类似的自动scorefield。只有在这里第一个值是 3,下一个值是 2,后面的所有值都需要有 1 分。

好吧,我希望答案很简单,非常感谢,已经在考虑这个问题了!!

python中的enumerate()函数应该对你有用:

    def post(self) -> Response:
    data = request.get_json()
    for sublist in data['sublist']:
        for i,item in enumerate(sublist['item']):
            item['positionId'] = i
    post_list = Lists(**data).save()
    output = {'id': str(post_list.id)}
    return jsonify({'result': output})