【问题标题】:Invalid JSON payload received. Unknown name \"row\" at 'payload': Cannot find field on google automl api收到无效的 JSON 有效负载。 'payload' 处的未知名称 \"row\":在 google automl api 上找不到字段
【发布时间】:2020-10-25 18:59:42
【问题描述】:

我正在尝试实现 google automl api https://cloud.google.com/automl-tables/docs/predict

api 文档说我需要以以下格式发布数据

{
  "payload": {
    "row": {
     "values": [value1, value2,...]
         }
      }
}

但是当我以相同格式发布数据时,我收到以下错误。

{
  "error": {
    "code": 400,
    "message": "Invalid JSON payload received. Unknown name \"row\" at 'payload': Cannot find field.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
    "@type": "type.googleapis.com/google.rpc.BadRequest",
    "fieldViolations": [
      {
        "field": "payload",
        "description": "Invalid JSON payload received. Unknown name \"row\" at 'payload': Cannot find field."
      }
    ]
      }
    ]
  }
}

这是我的 curl 请求

curl --location --request POST 'https://automl.googleapis.com/v1/projects/project-id/locations/us-central1/models/TBLID:predict' \
--header 'Content-Type: application/json; charset=utf-8;' \
--header 'Accept-Charset: utf-8' \
--header 'Authorization: Bearer token here' \
--data-raw '{
 "payload": {
"row": {
  "values": [
    "",
    "4.900000",
    ""
  ]
}
 }
}'

我不确定是什么导致了这个错误。谁能帮忙解决这个问题谢谢

【问题讨论】:

  • 如果您可以包含您发送的JSON数据的示例(无需包含真实数据,您可以包含虚拟数据),这将有助于理解实际问题。
  • 就像上面的评论说的那样,如果没有看到您实际传入的内容,我们将无法帮助您。
  • 我说我以相同的格式传递数据
  • issuetracker 中有类似问题:issuetracker.google.com/issues/160540294
  • 你看过api url吗

标签: google-cloud-platform google-cloud-automl


【解决方案1】:

我有一个带有 AutoML 表的项目,这是一个发送的示例预测请求,它工作正常并且返回结果没有错误:

{
  "payload": {
    "row": {
      "values": [
        "2",
        "test text",
        "test text",
        "21",
        "0",
        "0",
        "test text",
        "10",
        "",
        "S"
      ]
    }
  }
}

如果您不确定如何提交数据或遇到错误,请转到控制台中的项目和 AutoML Tables 模型,然后单击“测试和使用”。然后,按照getting an online prediction from console 的这些指示进行操作。注意 JSON 代码视图,它将为您提供准确的输入,并让您也可以测试您的 JSON 输入。

为了测试,我提交了以下 curl 请求(更改了一些识别字符)

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
https://automl.googleapis.com/v1beta1/projects/this-isnt-a-real-project-id/locations/us-central1/models/TBL123451234512345:predict

我在发送请求的同一目录中的 request.json 文件是:

{
    "payload": {
      "row": {
        "values": [
          "yes",
          "-1",
          "primary",
          "jul",
          "51",
          "0",
          "yes",
          "no",
          "88",
          "cellular",
          "blue-collar",
          "unknown",
          "10",
          "620",
          "married"
        ]
      }
    }
  }

回复是:

{
  "payload": [
    {
      "tables": {
        "score": 0.9999906,
        "value": "no"
      }
    },
    {
      "tables": {
        "score": 9.42341e-06,
        "value": "yes"
      }
    }
  ]
}

我也在下面的邮递员中成功地重复了同样的请求:

curl --location --request POST 'https://automl.googleapis.com/v1beta1/projects/this-isnt-a-real-project-id/locations/us-central1/models/TBL123451234512345:predict' \
--header 'Accept-Charset: utf-8' \
--header 'Authorization: Bearer abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd' \
--header 'Content-Type: application/json' \
--data-raw '{
    "payload": {
      "row": {
        "values": [
          "yes",
          "-1",
          "primary",
          "jul",
          "51",
          "0",
          "yes",
          "no",
          "88",
          "cellular",
          "blue-collar",
          "unknown",
          "10",
          "620",
          "married"
        ]
      }
    }
  }'

【讨论】:

  • 是的,我只是复制粘贴了 json 代码视图并通过邮递员点击它,但我得到了错误
  • 关于您在邮递员中的操作方式是错误的。我通过直接卷曲击中它,它工作正常。如果没有关于您如何做其他事情的确切信息,我们将无法为您提供帮助。基本上,这不是 AutoML 有问题,而是在您构建 JSON 和 JSON 到达 API 之间发生的任何事情。
  • 我更新了邮递员生成的 curl 请求
  • 或者你可以发布你的 curl 请求,也许我可以从中找出一些东西
  • 您的请求json中的“4,900000”和“”之间似乎缺少逗号
【解决方案2】:

我复制了Quickstart 并且我做了一些成功的 curl 请求,您的问题似乎与您的 json 请求的格式有关;因此,我推荐以下测试:

  1. 从您的 json 中删除换行符,然后再次发出请求:
curl --location --request POST 'https://automl.googleapis.com/v1/projects/project-id/locations/us-central1/models/TBLID:predict' \
--header 'Content-Type: application/json; charset=utf-8;' \
--header 'Accept-Charset: utf-8' \
--header 'Authorization: Bearer token-here' \
--data-raw '{ "payload": { "row": { "values": [ "", "4.900000", "" ] } } }'
  1. 将 json 保存在文件中并再次发出请求:
curl --location --request POST 'https://automl.googleapis.com/v1/projects/project-id/locations/us-central1/models/TBLID:predict' \
--header 'Content-Type: application/json; charset=utf-8;' \
--header 'Accept-Charset: utf-8' \
--header 'Authorization: Bearer token-here' \
-d @request.json

如果在执行之后仍然存在问题,我建议您联系GCP support,以便他们可以在您的项目中分析您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    相关资源
    最近更新 更多