在Powershell中使用aws-cli发送JSON结构时出错。具体来说就是将项目放入现有DynamoDB表的调用。
问题似乎是我尝试发送的JSON对象中的键和值周围缺少双引号。我读过Powershell在输出双引号方面有些挑剔,尤其是在利用外部API时。
不幸的是,由于我的组织使用okta来认证AWS请求,因此我必须使用Powershell。
我已经尝试了在这里看到的所有内容:
...这里:
...这里:
https://github.com/aws/aws-cli/issues/1326
...这里:
我尝试过的内容:
这是基本的首次尝试:
okta-aws dh dynamodb put-item --table-name AlexaRoomLookup-dev --item '{"deviceId": {"S":"amzn1.ask.device.AEH2LHYGV7GSPP5THMR
5H56AI2OOMAQ7MF54CZ3E6WR433WGS6QAOCYCKJWRJ3TQY5IE76NWR2IKCANB6TJNKLDEZOO2YN6ACUVT33MKSS4CO6R7GJI6GDFLOBOPUA2IXX7RI732UXJ6PDST5KYC7CSQK
634K4APEBRNVOKVZIDECOCBBIFB4"},"roomNumber": {"N":9110}}' --return-consumed-capacity TOTAL
然后我尝试使用反斜杠转义:
okta-aws dh dynamodb put-item --table-name AlexaRoomLookup-dev --item {\"deviceId\":{\"S\":\"amzn1.ask.device.AEH2LHYGV7GSPP5THMR5H56AI2OOMAQ7MF54CZ3E6WR433WGS6QAOCYCKJWRJ3TQY5IE76NWR2IKCANB6TJNKLDEZOO2YN6ACUVT33MKSS4CO6R7GJI6GDFLOBOPUA2IXX7RI732UXJ6PDST5KYC7CSQK634K4APEBRNVOKVZIDECOCBBIFB4\"},\"roomNumber\": {\"N\":9110}} --return-consumed-capacity TOTAL
然后使用反引号(在这里我已将其替换为星号,因此SO会将其读取为代码)并反斜杠:
{*"deviceId*": {*"S*":*"amzn1.ask.device.AEH2LHYGV7GSPP
5THMR5H56AI2OOMAQ7MF54CZ3E6WR433WGS6QAOCYCKJWRJ3TQY5IE76NWR2IKCANB6TJNKLDEZOO2YN6ACUVT33MKSS4CO6R7GJI6GDFLOBOPUA2IXX7RI732UXJ6PDST5KYC
7CSQK634K4APEBRNVOKVZIDECOCBBIFB4*"},*"roomNumber*": {*"N*":9110}}" --return- consumed-capacity TOTAL
然后我尝试了“ here字符串”,但无济于事。
期望和结果:
我希望Microsoft文档中的一种转义方法可以正常工作。
以上每种方法均以基于转义方法的有问题的“ JSON接收”的变体形式给出了此错误,但在键和值周围从来没有双引号:
Error parsing parameter '--item': Invalid JSON: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
JSON received: {deviceId: {S:amzn1.ask.device.AEH2LHYGV7GSPP5THMR5H56AI2OOMAQ7MF54CZ3E6WR433WGS6QAOCYCKJWRJ3TQY5IE76NWR2IKCANB6TJNKLDEZOO2YN6ACUVT33MKSS4CO6R7GJI6GDFLOBOPUA2IXX7RI732UXJ6PDST5KYC7CSQK634K4APEBRNVOKVZIDECOCBBIFB4},roomNumber: {N:9110}}
似乎唯一可行的方法是使用“ file://file.json”作为--item的输入,我在任何地方都找不到文档...我认为它在我链接的github线程上。但是,我不想每次都想通过AWS API调用发送JSON时都编辑文件...在这里:
okta-aws dh dynamodb put-item --table-name AlexaRoomLookup-dev --item file://file.json --return-consumed-capacity TOTAL
除了上面列出的内容以外,没有人能提供有关上述方法为什么行不通的信息吗?我刚刚实施不正确吗?
谢谢。
答案 0 :(得分:0)
您可以在命令开头尝试使用PowerShell“停止解析符号”(即“-%”)。这告诉PowerShell逐字使用其余参数。
PS> okta-aws --% dh dynamodb put-item --table-name AlexaRoomLookup-dev --item '{"deviceId": {"S":"amzn1.ask.device.AEH...etc...FB4"},"roomNumber": {"N":9110}}' --return-consumed-capacity TOTAL
有关更多详细信息,请参见about_parsing ...
如果您的json位于变量中,这将无济于事,但如果像上面的示例一样对其进行硬编码,它可能会起作用。
答案 1 :(得分:0)
在尝试使用 PowerShell 使用JSON主体向Amazon SQS发送消息时,我遇到了同样的问题。在尝试了不同的转义字符之后,以下内容对我有用。
aws sqs send-message --queue-url "<queue-url>" --message-body '{\""key1\"": \""value1\"",\""key2\"": \""value2\"",\""key3\"": \""value3\"" }'
操作系统:Windows 10 Pro(版本1803)
AWS CLI版本:1.16.180