【问题标题】:AWS CLI Invalid JSON Error - Expecting property name enclosed in double quotesAWS CLI 无效 JSON 错误 - 期望用双引号括起来的属性名称
【发布时间】:2017-09-22 18:02:00
【问题描述】:

我正在用 javascript 编写一个依赖于 AWS 的应用程序,并且我正在利用 AWS CLI 来自动化我的 AWS 资源的构建过程。我正在尝试创建启用了 CORS 的 API Gateway 资源。在调用api网关CLI的put-integration-response方法时,添加--response-parameters参数时,收到如下错误:

>> Error parsing parameter '--response-parameters': Invalid JSON: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
>> JSON received: {method.response.header.Access-Control-Allow-Origin:'*'}

这是导致问题的 --response-parameters 参数:

--response-parameters {"method.response.header.Access-Control-Allow-Origin":"\'*\'"}

如果有帮助,这个参数将通过 Grunt 的 grunt-exec 插件提供。究竟是什么导致了这个问题?我尝试添加更多双引号,但它们似乎没有出现在“收到的 JSON”中。

【问题讨论】:

  • 您似乎错过了将参数包含在单引号中。 --response-parameters '{"method.response.header.custom-header": "'"'"'custom-value'"'"'"}' 这个链接有很好的例子:docs.aws.amazon.com/cli/latest/reference/apigateway/…
  • 所以我需要将整个 JSON 字符串用单引号括起来吗?我现在就试试。
  • 我会尝试一下。确保引号正确关闭和转义。
  • 更新输入:--response-parameters \'{"method.response.header.Access-Control-Allow-Origin":"\'*\'"}\' 结果:>> Error parsing parameter '--response-parameters': Expected: '=', received: ''' for input: >> '{method.response.header.Access-Control-Allow-Origin:'*'}' 不幸的是,这会产生一个新错误。
  • 这似乎与原始问题不同,现在解析器可以理解 KEY,但无法找到值。

标签: javascript json amazon-web-services aws-api-gateway aws-cli


【解决方案1】:

这是来自here的另一个解决此问题的方法

基本上,您在 Windows 上的 JSON 内的引号前使用 \: Linux/Mac:

 --expression-attribute-values '{ ":u": {"S":"anotherUser"}}'

在 Windows 上会这样:

--expression-attribute-values '{ \":u\": {\"S\":\"anotherUser\"}}'

希望它有助于解决您的错误

【讨论】:

  • 谢谢!这应该是答案。
【解决方案2】:

我在关注AWS Lambda Functions tutorial 时遇到了同样的问题 无论我尝试什么,我都无法让 response-models 参数接受 JSON(在 Windows 10 上)。我终于弄明白了:我创建了一个名为 response-models.json 的文件,文件第一行的内容为 {"application/json": "Empty"} 我将它保存在当前目录中。然后作为 response-models 参数的值,我使用了 file://response-models.json 重要提示: 文件必须以没有 BOM 的格式保存,这样只有 ASCII 字符会从中出来,而不会出现其他乱码。 (我使用了 Sublime Text,它允许以没有 BOM 的 UTF-8 以及许多其他格式保存。) 瞧!我得到了以下回复:

{
    "statusCode": "200",
    "responseModels": {
        "application/json": "Empty"
    }
}

【讨论】:

  • 谢谢。也为我工作。令人沮丧的是,AWS 文档声称您可以用单引号括起来:docs.aws.amazon.com/cli/latest/userguide/…。但是很明显这不起作用,因为您收到此响应“无效的 JSON:期望用双引号括起来的属性名称:第 1 行第 2 列(字符 1)”
  • 嗨,如果我想将 json 值解析为 Terraform,我遇到了类似的错误,我在这个问题中发布了这个,如果你能看一下,将不胜感激:stackoverflow.com/questions/65938396/…
【解决方案3】:

您可以通过“'”'“'*'”'“'”对静态值进行编码。

例子:

aws apigateway put-integration-response --rest-api-id xxxxx --resource-id xxxxxx --http-method GET --status-code 200 --response-parameters '{"method.response.header.Access-Control-Allow-Origin": "'"'"'*'"'"'"}' 

我建议使用 JavaScript SDK 调用 API Gateway 来管理您的资源。您可以从SDK documentation.找到更多信息

【讨论】:

  • 嗨,如果我想将 json 值解析为 Terraform,我遇到了类似的错误,我在这个问题中发布了这个,如果你能看一下,将不胜感激:stackoverflow.com/questions/65938396/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
相关资源
最近更新 更多