#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. Привет, спасибо за ответ, но не могли бы вы уточнить его?