google-cloud-platform - 使用云工作流 Firestore 连接器在 Firestore 中插入数据时出现问题,其中 Json 对象来自上一步,这是一个云功能
问题描述
我正在尝试构建一个工作流,在第 1 步中我正在运行一个云函数,它以 python 字典的形式返回一个 Json 对象,我希望使用 firestore 连接器将其插入到 Firestore 中。但我收到以下错误:
HTTP server responded with error code 400
in step "create_document", routine "main", line: 27
HTTP server responded with error code 400
in step "create_document", routine "main", line: 28
{
"body": {
"error": {
"code": 400,
"details": [
{
"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
{
"description": "Invalid JSON payload received. Unknown name \"field1\" at 'document.fields[0].value': Cannot find field.",
"field": "document.fields[0].value"
},
{
"description": "Invalid value at 'document.fields[1].value' (type.googleapis.com/google.firestore.v1.Value), 200",
"field": "document.fields[1].value"
},
{
"description": "Invalid JSON payload received. Unknown name \"Alt-Svc\" at 'document.fields[2].value': Cannot find field.",
"field": "document.fields[2].value"
},
{
"description": "Invalid JSON payload received. Unknown name \"Cache-Control\" at 'document.fields[2].value': Cannot find field.",
"field": "document.fields[2].value"
},
{
"description": "Invalid JSON payload received. Unknown name \"Content-Length\" at 'document.fields[2].value': Cannot find field.",
"field": "document.fields[2].value"
},
{
"description": "Invalid JSON payload received. Unknown name \"Content-Type\" at 'document.fields[2].value': Cannot find field.",
"field": "document.fields[2].value"
},
{
"description": "Invalid JSON payload received. Unknown name \"Date\" at 'document.fields[2].value': Cannot find field.",
"field": "document.fields[2].value"
}
这就是我的工作流程的样子
main:
params: [args]
steps:
- step1:
call: http.get
args:
url: https://XXXXXXXXXXXXX.cloudfunctions.net/step1-workflow
query:
bucket_name: ${args.bucket_name}
blob_name: ${args.blob_name}
result: key_val
- step2:
assign:
- project_id: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
- collection: "a-dummy-collection"
- document: "new7-dummy-document"
- create_document:
call: googleapis.firestore.v1.projects.databases.documents.createDocument
args:
collectionId: ${collection}
parent: ${"projects/" + project_id + "/databases/(default)/documents"}
query:
documentId: ${document}
body:
fields: ${key_val}
result: inserted
如果代替 ${key_val} 我使用简单的 json {"field1": {"stringValue": "str1"},"field2": {"integerValue": 10}} 它工作正常并且数据被插入到 Firestore 但是如果我尝试使用与提到的 json 结构相同的变量 ${key_val} 中的对象,则会出错。
解决方案
评论中给出的答案:${key_val}
调用云函数的结果实际上是返回整个响应对象,而不仅仅是正文。这就是为什么在错误消息中,您会看到诸如content-type
和其他标头之类的内容。
这里的解决方案是说我们想要该响应的主体:${key_val.body}
。
推荐阅读
- c++ - 在 Linux 上使用 Mingw 编译 GMP 库
- javascript - 通过单击按钮逐行显示 csv 内容
- xamarin - OneSignal 推送通知中的 AdditionalData
- javascript - 将鼠标悬停在卡片上时,我可以更改卡片的图像。但是对于大量具有不同图像的卡片,我该如何做到这一点
- python - 在目标函数中加入主变量和辅助变量的乘积
- opencv - OpenCV4中TGA格式加载的任何解决方案
- java - 为什么 Lombok 在覆盖通用 getter 时会生成额外的 Getter?
- r - 从 R 导出西里尔字符?
- python - 我可以在异步协程上使用阻塞锁吗?
- tensorflow - tensorflow.keras.preprocessing.text.Tokenizer.texts_to_matrix 有什么作用?