【问题标题】:Google Sheets API (""Invalid JSON payload received. Unknown name \"\": Root element must be a message."")Google Sheets API (""收到无效的 JSON 有效负载。未知名称 \"\": 根元素必须是消息。"")
【发布时间】:2021-05-26 21:21:19
【问题描述】:

尝试通过 Google Sheets API 和 BatchUpdate 方法向 Google Sheet 添加数据,但出现此错误(不知道它指的是什么)

> PHP Fatal error:  Uncaught Google\Service\Exception: {   "error": {
>     "code": 400,
>     "message": "Invalid JSON payload received. Unknown name \"\": Root element must be a message.",
>     "errors": [
>       {
>         "message": "Invalid JSON payload received. Unknown name \"\": Root element must be a message.",
>         "reason": "invalid"
>       }
>     ],
>     "status": "INVALID_ARGUMENT"   } }

这是我的新代码:

 $spreadsheetId = 'myspreadsheetid';
 $client = new Google_Client();
 $client->setAuthConfig('mycredntials.json');
 $client->setApplicationName('Sheet Automation');
 $client->setScopes(Google_Service_Sheets::SPREADSHEETS);
 $service = new Google_Service_Sheets($client);
 $range = 'A2:L';
 $valueInputOption = 'USER_ENTERED';
 $body = new Google_Service_Sheets_ValueRange([
            'values' => $row1
    ]);
 $params = [
      'valueInputOption' => $valueInputOption
    ];
 $result = $service->spreadsheets_values->append($spreadsheetId, $range, $body, $params);

编辑:

我从数据库中获取的数据被放入一个数组 ($row1) 中,回显时如下所示:

(
    [cdr_id] => myid
    [calldate] => 2021-05-27
    [src] => mysource
    [accountcode] => myaccountcode
    [userfield] => disposition
    [ivr_std_txn_full] =>
)

然后我获取该信息并使用 implode 将其全部放在一行中(这可能是问题所在)

echo $line1 = implode(',', $row1)

我尝试将值设置为附加到 $row1 和 $line1,但仍然遇到有效负载问题。

【问题讨论】:

  • 关于你的请求体,我认为需要修改。但是,不幸的是,我无法从您的问题和脚本中了解您的目标。因此,我无法提出修改后的脚本。我为此道歉。我可以问你目标的细节吗?
  • @Tanaike 是的,基本上我是从数据库中抓取数据以输入到 Google 表格中。这部分代码没有在这里显示,但 $line1 是包含我从数据库中获得的数据的数组。对于请求正文,我想做两件事:将数据附加到新行并将 F 列中新附加的数据拆分为单独的列,因为它是一条长线,数据用逗号分隔,我需要从那里获取一些数据所以是最好的选择
  • 感谢您的回复。我不得不为我糟糕的英语水平道歉。不幸的是,我无法从您的回复中想象出您的目标。但我想试着理解它。当我能正确理解它时,我想考虑解决方案。非常抱歉,我无法尽快解决您的问题。
  • 你好@UzZzi!该错误声明 JSON 不满足所需的格式。要丢弃配置错误的 JSON,您能否测试一个有效的已知 JSON 并查看它是否会产生错误?
  • 嘿@Jacques-GuzelHeron 因此,在稍微更改我的代码以开始简单并找到问题之后,我的目标就是追加新数据。即便如此,它仍然给我同样的问题,所以有效载荷问题是我的数据格式不正确。我与代码一起编辑了我的问题,并添加了更多关于请求中发送的数据的信息。希望它有助于识别问题。感谢您的帮助

标签: php google-sheets-api


【解决方案1】:

一旦我终于想通了,解决方案就非常简单了。如果您不手动输入值,而是使用一个填充了数据的数组,您只需要引用数组中的每个键,而不仅仅是数组。

请求正文最终如下所示:

 $body = new Google_Service_Sheets_ValueRange([
                //'values' => $row1
                'values' =>
                [
                        [
                                $row1['cdr_id'], $row1['calldate'], $row1['src'], $row1['accountcode'], $row1['userfield'], $row1['ivr_std_txn_full']
                        ]
                ]
        ]);
        $params = [
          'valueInputOption' => $valueInputOption
        ];
        $result = $service->spreadsheets_values->append($spreadsheetId, $range, $body, $params);

【讨论】:

    【解决方案2】:

    在我的情况下,因为某些数据有null的值,所以请确保您要发送的数据不是null,您可以将其更改为empty string或其他。

    示例:

    [ivr_std_txn_full] => null
    

    改为:

    [ivr_std_txn_full] => ''
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-01
      • 2019-08-04
      • 2019-09-15
      • 2020-10-25
      相关资源
      最近更新 更多