Отправка полного ответа обратно вместе с измененными парами ключ-значение в другой API после получения данных из одного API

#javascript #json #google-apps-script #google-sheets

#javascript #json #google-apps-script #google-sheets

Вопрос:

Я получаю это как ответ от внутреннего API моей компании:

Пример:

 {
"name":"kolich",
"platform":"web",
"usertype":"paid",
"age":22,
"gender":"male",
"activityStatus":"active",
"isNewUser":false

}
  

Я изменяю значения этих ключей и просто отправляю их в api обновления с помощью post-запроса

полезная нагрузка:

 {
"activityStatus":"inactive",
"isNewUser":true

}
  

Проблема :

Когда я отправляю только эти обновленные значения в API, все остальные значения других ключей, кроме name, становятся пустыми. Как я могу отправить обновленные значения ключей вместе с не обновленными парами ключ-значение?

Я использую Google Sheets, и скрипт приложений выполняет вышеуказанные операции.

Как я могу отправить полный ответ обратно в API вместе с измененными парами ключ-значение? В примере всего 7 полей, но на самом деле у меня 31 поле. Как я могу этого добиться?

P.S — Я не могу вносить какие-либо изменения в код API.

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

1. Я не знаю, какие ограничения Google sheets накладывает на ваш код, но в современном JS вы можете просто отправить обратно {...response, activityStatus: "inactive", isNewUser:true}

2. Но в этом случае эти два ключа не будут повторяться? Кроме того, как я могу отправить полезную нагрузку, как вы упомянули, потому что ответ будет таким {{ «имя»: «колич», «платформа»: «веб», «тип пользователя»: «оплачено», «возраст»: 22, «пол»: «мужской», «activityStatus»: «активный», «isNewUser»: false }}, модифицированный ключ: значения }. Это приведет к ошибке из-за неправильного формата

3. Возможно, вы захотите изучить синтаксис распространения (…)

4. Это не работает в Google Apps script? Я попробовал с вышеупомянутым синтаксисом

5. Я не очень удивлен. Что ж, вам придется сделать это другим способом. Ответ от Сергея может сработать. Я не большой поклонник изменения полученных данных, но если вся идея заключается в обновлении сервера, это может быть не так уж плохо.

Ответ №1:

Это довольно просто с синтаксисом распространения объекта. Вы должны просто иметь возможность отправлять обратно:

 {...response, activityStatus: "inactive", isNewUser:true}
  

Но, как указывает Сергей, вы также можете изменить полученный объект, если он вам больше не нужен или если вам нужно использовать его с учетом этих изменений:

 const process = async (...args) => {
  // do some work
  const response = await getTheData()
  // do some more work

  response.activityStatus = 'inactive';
  response.isNewUser = true

  // do even more work
  const acknowledgement = await updateTheServer(response)
  // you get the idea 
}
  

Хотя я лично предпочитаю избегать изменения входных объектов, выбор за вами.

Ответ №2:

Вы можете проанализировать свой ответ на объект и изменить его следующим образом:

 res.activityStatus = "inactive"
res.isNewUser = true
  

Затем отправьте объект обратно.

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

1. Привет, спасибо за ответ, но не могли бы вы уточнить его?