在 pwsh 中调用以下命令:
Write-Host '{"drop_attr": "name"}'
Run Code Online (Sandbox Code Playgroud)
结果正常:
{"drop_attr": "name"}
Run Code Online (Sandbox Code Playgroud)
现在通过 pwsh 执行相同操作:
pwsh -Command Write-Host '{"drop_attr": "name"}'
Run Code Online (Sandbox Code Playgroud)
结果缺少引号和方括号?
drop_attr: name
Run Code Online (Sandbox Code Playgroud) 在 Powershell 中使用 aws-cli 发送 JSON 结构时出错。具体来说,是调用将项目放入现有 DynamoDB 表中。
问题似乎是我尝试发送的 JSON 对象中的键和值缺少双引号。我读到,Powershell 对输出双引号很挑剔,尤其是在利用外部 API 时。
不幸的是,由于我的组织使用 okta 来验证 AWS 请求,因此我必须使用 Powershell。
我已经尝试了我在这里看到的一切:
...这里:
解析参数“--expression-attribute-values”时出错:无效 JSON:需要用双引号括起来的属性名称:第 1 行第 3 列(字符 2)
...这里:
https://github.com/aws/aws-cli/issues/1326
...和这里:
PowerShell:在传递给外部程序的字符串中转义双引号的最佳方法?例如,一个 JSON 字符串
我尝试过的:
这是基本的第一次尝试:
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
Run Code Online (Sandbox Code Playgroud)
然后我尝试用反斜杠转义:
okta-aws dh dynamodb put-item --table-name AlexaRoomLookup-dev --item {\"deviceId\":{\"S\":\"amzn1.ask.device.AEH2LHYGV7GSPP5THMR5H56AI2OOMAQ7MF54CZ3E6WR433WGS6QAOCYCKJWRJ3TQY5IE76NWR2IKCANB6TJNKLDEZOO2YN6ACUVT33MKSS4CO6R7GJI6GDFLOBOPUA2IXX7RI732UXJ6PDST5KYC7CSQK634K4APEBRNVOKVZIDECOCBBIFB4\"},\"roomNumber\": {\"N\":9110}} --return-consumed-capacity TOTAL
Run Code Online (Sandbox Code Playgroud)
然后用反引号(我在这里用星号替换它,这样就可以将其读取为代码)和反斜杠进行转义:
{*"deviceId*": {*"S*":*"amzn1.ask.device.AEH2LHYGV7GSPP
5THMR5H56AI2OOMAQ7MF54CZ3E6WR433WGS6QAOCYCKJWRJ3TQY5IE76NWR2IKCANB6TJNKLDEZOO2YN6ACUVT33MKSS4CO6R7GJI6GDFLOBOPUA2IXX7RI732UXJ6PDST5KYC
7CSQK634K4APEBRNVOKVZIDECOCBBIFB4*"},*"roomNumber*": {*"N*":9110}}" --return- consumed-capacity TOTAL
Run Code Online (Sandbox Code Playgroud)
然后我尝试了“这里字符串”,但无济于事。
期望和结果:
我希望微软文档中的转义方法能够起作用。
上面的每一个都给出了这个错误,并根据转义方法有问题的“JSON收到”的变体,但它从来没有在键和值周围使用双引号:
Error parsing …
Run Code Online (Sandbox Code Playgroud)