我正在编写一个python脚本,它首先在GoogleSheets中创建一个工作表,然后将CSV上传到其中,然后从工作表中生成幻灯片表格。我正在使用sheets API,我可以成功地创建一个新的工作表。然而,当尝试将CSV上传到其中时,我得到一个“无效JSON负载”错误,表示找不到PasteDataRequest。我直接从docs PasteDataRequest docs和batchUpdate docs中获取它
这就是脚本的样子
from __future__ import print_function
from apiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools
from datetime import datetime
SCOPES = (
'https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/presentations',
)
store = file.Storage('.//script//storage.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('.//script//credentials.json', SCOPES)
creds = tools.run_flow(flow, store)
HTTP = creds.authorize(Http())
SHEETS = discovery.build('sheets', 'v4', http=HTTP)
SLIDES = discovery.build('slides', 'v1', http=HTTP)
print('Creating Sheet')
csvInInbox = './/Inbox//Report.csv'
reportSheet = {
'properties': {
'title': 'CRM results report - ' + str(datetime.now())
}
}
sheetsRsp = SHEETS.spreadsheets().create(body=reportSheet,fields='spreadsheetId').execute()
sheetId = sheetsRsp.get('spreadsheetId')
print('DONE\nSpreadsheet ID: {0}'.format(sheetsRsp.get('spreadsheetId')))
print('\nUploading CSV into sheet ' + sheetId)
sheetReq = [{'PasteDataRequest': {
'coordinate': {
'sheetId': sheetId,
'rowIndex': 0,
'columnIndex': 0
},
'data': csvInInbox,
'type': "enum" "(PASTE_NORMAL)",
'delimiter': ",",
}
}]
sheetsRsp = SHEETS.spreadsheets().batchUpdate(body = {'requests': sheetReq},spreadsheetId=sheetId).execute()
print("DONE\n")
根据文件,这似乎是正确的要求。谁能告诉我我做错了什么?这是我第一次使用API,所以我可能忘了什么。
错误消息:
"Invalid JSON payload received. Unknown name "PasteDataRequest" at 'requests[0]': Cannot find field."
我相信你的目标如下。
对于这个问题,这个答案如何?
>
csvInbox='。//Inbox//Report.csv'
不能直接用于请求主体,如'data': csvInbox
。要求读取文件内容。
sheetId=sheetsRsp的
是电子表格ID。因此,当使用它时,会发生错误。在您的情况下,新电子表格中第一个选项卡的工作表ID为sheetId
。get('spreadsheetId')0
。所以你可以用这个。
您的请求正文需要修改。请修改如下。
>
从
sheetReq = [{'PasteDataRequest': {
'coordinate': {
'sheetId': sheetId,
'rowIndex': 0,
'columnIndex': 0
},
'data': csvInInbox,
'type': "enum" "(PASTE_NORMAL)",
'delimiter': ",",
}
}]
到
sheetReq = [{
"pasteData": {
"coordinate": {
"sheetId": 0,
"rowIndex": 0,
"columnIndex": 0
},
"data": csvInInbox,
"type": "PASTE_NORMAL",
"delimiter": ","
}
}]
当上述各点反映到脚本中时,它将变成如下所示。
print('Creating Sheet')
csvInInbox = './/Inbox//Report.csv'
reportSheet = {
'properties': {
'title': 'CRM results report - ' + str(datetime.now())
}
}
sheetsRsp = SHEETS.spreadsheets().create(body=reportSheet,fields='spreadsheetId').execute()
sheetId = sheetsRsp.get('spreadsheetId')
print('DONE\nSpreadsheet ID: {0}'.format(sheetsRsp.get('spreadsheetId')))
print('\nUploading CSV into sheet ' + sheetId)
sheetReq = [{'PasteDataRequest': {
'coordinate': {
'sheetId': sheetId,
'rowIndex': 0,
'columnIndex': 0
},
'data': csvInInbox,
'type': "enum" "(PASTE_NORMAL)",
'delimiter': ",",
}
}]
sheetsRsp = SHEETS.spreadsheets().batchUpdate(body = {'requests': sheetReq},spreadsheetId=sheetId).execute()
print("DONE\n")
print('Creating Sheet')
csvInInbox = './/Inbox//Report.csv'
with open(csvInInbox) as f:
csvInInbox = f.read()
reportSheet = {
'properties': {
'title': 'CRM results report - ' + str(datetime.now())
}
}
sheetsRsp = SHEETS.spreadsheets().create(body=reportSheet, fields='spreadsheetId').execute()
sheetId = sheetsRsp.get('spreadsheetId')
print('DONE\nSpreadsheet ID: {0}'.format(sheetsRsp.get('spreadsheetId')))
print('\nUploading CSV into sheet ' + sheetId)
sheetReq = [{
"pasteData": {
"coordinate": {
"sheetId": 0,
"rowIndex": 0,
"columnIndex": 0
},
"data": csvInInbox,
"type": "PASTE_NORMAL",
"delimiter": ","
}
}]
sheetsRsp = SHEETS.spreadsheets().batchUpdate(body={'requests': sheetReq}, spreadsheetId=sheetId).execute()
print("DONE\n")
csvInbox='的文件。//Inbox//Report.csv'
再次存在。我刚开始使用Sheets API,并按照以下设置创建新的工作表:https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/create 在此代码中,spreadsheetBody对象为空。为此,我使用了本页上的示例:https://developers.google.com/sheets/api/samples/
所以我现在正在开发一个PWA。 我现在正在处理推送通知,并且已经能够通过以下非常简单的JSON结构接收后台和前台通知。 最后,我尝试在setBackgroundMessageHandler中硬编码图标和click_action,但没有成功。如果不显示图标,则单击通知时不会发生任何情况。 这纯粹是一个Ionic PWA项目,意在移动浏览器和桌面上运行。我会很感激你给我的每一个小费!谢谢!
我试图将一个报告从Google Ads API拉到Google sheets中,但我无法让API将我的查询识别为查询
问题内容: 我正在构建JSON对象,并使用JQuery ajax将其传递到服务器。 但是,当我的blogBody变量包含代码时,将失败并显示错误消息: 有人可以说错误在哪里以及如何解决? 问题答案: 在JSON中,键必须用双引号()而不是单引号()引起。同样,字符串值必须用双引号而不是单引号引起来。您正在使用单引号。例如,标题文字前后。 因此,至少,您需要交换这些引号,例如:
如果我创建一个JWT令牌,有效负载中应该有哪些数据?我在网上查找了一些示例和解释,有些人将密码放在JWT中,有些人没有。 现在我正在传递以下数据: 将散列密码放入JWT有效负载感觉不对,因为JWT将被放置在前端应用程序中。它应该在那里吗? 最佳实践是什么?
问题内容: 我正在尝试从Web服务器读取.json文件。 我从服务器接收到的JSON在http://jsonlint.com/上报告无效: 它显示以下测试结果: 在使用PHP解析之前,如何将其转换为VALID JSON? 问题答案: 所有键(preOpen,preClose等)都必须是字符串,因此它们需要用双引号引起来。 ===更新=== 如果您的Json-String无效,则可以使用以下脚本对其