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

Bor*_*ris 4 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
Run Code Online (Sandbox Code Playgroud)

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

  1. 我尝试过将单引号与双引号交换。
  2. 到处都使用双引号
  3. 将单引号和双引号加倍
  4. 使用斜线
  5. 完全删除单引号

mkl*_*nt0 5

有两个直接的问题:

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

  • 可悲的是,PowerShell要求您在调用外部程序时\转义参数内部"字符,即使这不是必需的- 有关详细信息,请参见此文档问题

因此,请尝试此操作。请注意如何'...'将其用于外部引号(PowerShell在幕后将其转换为双引号),以便您不必"`"在字符串内部一样进行转义-请注意,然后按字面意义对待字符串内容;
\-escaping,但是,总是调用外部程序,如在需要的时候aws

... --expression-attribute-values '{ \":d\": { \"S\": \"2018-08-15\" } }'
Run Code Online (Sandbox Code Playgroud)

如果确实需要"..."使用外部引号来使用字符串扩展(插值),即为了嵌入变量引用和表达式,事情就会变得更糟,因为您需要应用两种转义:`"第一,满足PowerShell的语法要求,然后\确保将生成的嵌入式"文件正确传递到目标程序:

$date = [datetime]::now.ToString('yyyy-MM-dd')
... --expression-attribute-values "{ \`":d\`": { \`"S\`": \`"$date\`" } }"
Run Code Online (Sandbox Code Playgroud)

一个下面的字符串可以缓解疼痛,但要注意,它总是使命令的多行 -并且需要\-escaping仍然适用(需要注意的是"@,关闭定界符不仅要在自己的行,就必须在该行的开头):

... --expression-attribute-values @"
  { \":d\": { \"S\": \"$date\" } }
"@
Run Code Online (Sandbox Code Playgroud)