#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