解析参数'--expression-attribute-values'时出错:无效的JSON:期望属性名称用双引号引起来:第1行第3列(字符2)

时间:2018-08-15 15:24:51

标签: powershell amazon-dynamodb

我正在运行以下查询

aws dynamodb query `
--table-name user`
--key-condition-expression "datecreated = :d" `
--expression-attribute-values "{ ':d': { 'S': '2018-08-15' } }" --endpoint-url http://localhost:8000

dynamodb甚至不知道双引号是什么吗?

  1. 我尝试过将单引号与双引号互换。
  2. 在各处使用双引号
  3. 加倍单引号和双引号
  4. 使用斜杠
  5. 完全删除单引号

3 个答案:

答案 0 :(得分:2)

当前有两个问题:

  • '(单引号)在JSON中不是有效的字符串定界符;您必须使用" (双引号):

  • 遗憾的是, PowerShell要求您在调用外部程序时使用\-转义参数内部的"字符 ,即使这样应该没有必要-有关详细信息,请参见this documentation issue

因此,请尝试此操作;请注意 '...'是如何用于外部报价(PowerShell会将其转换为幕后的双引号),这样您就不必逃脱"像在字符串内的`"一样-请注意,然后从字面上看
但是,在调用诸如\之类的外部程序时,总是需要使用aws转义:

... --expression-attribute-values '{ \":d\": { \"S\": \"2018-08-15\" } }'

如果确实需要 "..."作为外部引用,则可以使用字符串扩展(插值),即嵌入变量引用和表达式,情况变得更糟,因为您需要应用两种转义:`",以满足PowerShell的语法要求,其次是\,以确保生成的嵌入式{{1 }}正确地传递到目标程序:

"

here-string可以减轻痛苦,但是请注意,它总是使命令 multi-line -并且仍然需要使用$date = [datetime]::now.ToString('yyyy-MM-dd') ... --expression-attribute-values "{ \`":d\`": { \`"S\`": \`"$date\`" } }" 进行转义(请注意{ {1}},结束分隔符不仅必须在其单独的行上,而且还必须在该行的非常开始处):

\

答案 1 :(得分:1)

使用键条件表达参数时,我遇到了同样的问题

aws dynamodb query --table-name mystore --key-condition-expression "clientid = :name" --expression-attribute-values '{":name":{"S":"chris@example.com"}}'

那会给

enter image description here

为了解决该问题,只需将命令更改为(请注意\"

aws dynamodb query --table-name mystore --key-condition-expression "clientid = :name" --expression-attribute-values '{\":name\":{\"S\":\"chris@example.com\"}}'

enter image description here

答案 2 :(得分:0)

当我想创建一个接受参数的 bash 脚本以便我可以使用各种输入进行查询时遇到了这个问题。

避免该问题的一种方法是使用临时 json 文件。

在 bash 脚本中:

attrvalues="{\":d\": {\"S\": \"$1\"}}"
echo "$attrvalues" > attr-values.json

如果您提供 2021-01-31 作为第一个输入,它将在下面创建一个文件:

{
  ":d": {"S": "2021-01-31"}
}

然后在 bash 脚本中:

aws dynamodb query \
    --table-name user \
    --key-condition-expression "datecreated = :d" \
    --expression-attribute-values file://attr-values.json \
    --endpoint-url http://localhost:8000

rm attr-values.json