для итерации цикла в python для нового значения внутри вложенного json

#python #json #loops #for-loop #nested

Вопрос:

Это мой первый пост, в котором я пытаюсь освоить python для настройки серверной части api для mongodb (через mongoengine).

У меня есть эта часть кода:

 def post(self) -gt; 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"  }  ]  }  ] }   

Тем не менее, я пытаюсь добавить поле идентификатора в самые низкие массивы в структуре, чтобы указать положение элемента в подсписке (1, 2, 3 и т.д.). Для этого я искал подходящий цикл for. Перепробовал много вещей, это самое большое, что я до сих пор сделал:

 def post(self) -gt; 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. Только здесь первое значение будет равно 3, следующее-2, и все, что последует позже, должно иметь оценку 1.

Ну, я надеюсь, что ответ будет простым, большое спасибо, что уже обдумали этот вопрос!!

Ответ №1:

Функция enumerate() в python должна быть вам полезна:

 def post(self) -gt; 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})  

Комментарии:

1. Большое спасибо, это отлично работает! Также добавлены два оператора if-для фиксации другого значения, основанного на только что сгенерированном. Работает также хорошо. если товар[‘Идентификатор позиции’] == 1: товар[‘Список товаров’] = 3 еще: если товар[‘Идентификатор позиции’] == 2: товар[‘Список товаров’] = 2 еще: товар[‘Список товаров’] = 1