附加到 Google 工作表 API V4 时收到无效的 JSON 有效载荷
Invalid JSON payload received when appending to Google Sheets API V4
您好,我有一个小工具可以使用 API v4 编辑 Google Sheet。我可以从 sheet 中读取数据,但我无法附加任何内容。
$.ajax({
url: 'https://sheets.googleapis.com/v4/spreadsheets/' +
'SPREADSHEETID' +
'/values/' + 'TAB' +
'?alt=json&key=KEY',
type: 'POST',
data: {
majorDimension: 'ROWS',
range: 'A1:A2',
values: '32'
},
dataType: 'jsonp',
success: function (data) {
console.log(data);
}
});
这是我正在使用的代码,但我不断收到以下错误:Invalid JSON payload received. Unknown name \"values\": Cannot bind query parameter. Field 'values' could not be found in request message."
我相信你的目标如下。
- 您想使用 Sheets API 和 ajax 的 spreadsheets.values.update 方法将值放入 Spreadsheet。
修改点:
- spreadsheets.values.update的方法使用了PUT方法。在您的脚本中,您似乎正在尝试使用 POST 方法。
- 不幸的是,在当前阶段,当使用PUT和POST方法时,无法使用API键请求这些方法。在这种情况下,请使用访问令牌。
- 在spreadsheets.values.update的方法中,请将请求体发送为字符串类型。并且,内容类型是
application/json
.
- 并且,该值为二维数组。
当这些点体现在你的脚本中,就变成了下面这样。
修改后的脚本:
$.ajax({
url: 'https://sheets.googleapis.com/v4/spreadsheets/###spreadsheetId###/values/A1?valueInputOption=USER_ENTERED',
method: 'PUT',
data: JSON.stringify({majorDimension: 'ROWS', values: [['32']]}),
headers: {
"Authorization": "Bearer ###your access token###",
"Content-Type": "application/json"
},
success: function (data) {
console.log(data);
},
error: function (res) {
console.log(res.responseText);
}
});
当您使用 A1
作为范围时,该值将放在第一个选项卡中。当您要将值设置为特定的 sheet 时,例如,请使用 Sheet2!A1
。请注意这一点。
顺便说一下,从Invalid JSON payload received when appending to Google Sheets API V4
的appending to Google Sheets
开始,如果你想把"32"
的值附加到Spreadsheet,请修改上面的脚本如下。 spreadsheets.values.append的方法参考是here.
来自
url: 'https://sheets.googleapis.com/v4/spreadsheets/###spreadsheetId###/values/A1?valueInputOption=USER_ENTERED',
method: 'PUT',
到
url: 'https://sheets.googleapis.com/v4/spreadsheets/###spreadsheetId###/values/###SheetName###:append?valueInputOption=USER_ENTERED',
method: 'POST',
参考:
您好,我有一个小工具可以使用 API v4 编辑 Google Sheet。我可以从 sheet 中读取数据,但我无法附加任何内容。
$.ajax({
url: 'https://sheets.googleapis.com/v4/spreadsheets/' +
'SPREADSHEETID' +
'/values/' + 'TAB' +
'?alt=json&key=KEY',
type: 'POST',
data: {
majorDimension: 'ROWS',
range: 'A1:A2',
values: '32'
},
dataType: 'jsonp',
success: function (data) {
console.log(data);
}
});
这是我正在使用的代码,但我不断收到以下错误:Invalid JSON payload received. Unknown name \"values\": Cannot bind query parameter. Field 'values' could not be found in request message."
我相信你的目标如下。
- 您想使用 Sheets API 和 ajax 的 spreadsheets.values.update 方法将值放入 Spreadsheet。
修改点:
- spreadsheets.values.update的方法使用了PUT方法。在您的脚本中,您似乎正在尝试使用 POST 方法。
- 不幸的是,在当前阶段,当使用PUT和POST方法时,无法使用API键请求这些方法。在这种情况下,请使用访问令牌。
- 在spreadsheets.values.update的方法中,请将请求体发送为字符串类型。并且,内容类型是
application/json
. - 并且,该值为二维数组。
当这些点体现在你的脚本中,就变成了下面这样。
修改后的脚本:
$.ajax({
url: 'https://sheets.googleapis.com/v4/spreadsheets/###spreadsheetId###/values/A1?valueInputOption=USER_ENTERED',
method: 'PUT',
data: JSON.stringify({majorDimension: 'ROWS', values: [['32']]}),
headers: {
"Authorization": "Bearer ###your access token###",
"Content-Type": "application/json"
},
success: function (data) {
console.log(data);
},
error: function (res) {
console.log(res.responseText);
}
});
当您使用
A1
作为范围时,该值将放在第一个选项卡中。当您要将值设置为特定的 sheet 时,例如,请使用Sheet2!A1
。请注意这一点。顺便说一下,从
Invalid JSON payload received when appending to Google Sheets API V4
的appending to Google Sheets
开始,如果你想把"32"
的值附加到Spreadsheet,请修改上面的脚本如下。 spreadsheets.values.append的方法参考是here.来自
url: 'https://sheets.googleapis.com/v4/spreadsheets/###spreadsheetId###/values/A1?valueInputOption=USER_ENTERED', method: 'PUT',
到
url: 'https://sheets.googleapis.com/v4/spreadsheets/###spreadsheetId###/values/###SheetName###:append?valueInputOption=USER_ENTERED', method: 'POST',