首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用aws时在Powershell中正确格式化JSON?

如何在使用aws时在Powershell中正确格式化JSON?
EN

Stack Overflow用户
提问于 2019-06-18 13:54:22
回答 2查看 3.1K关注 0票数 0

在Powershell中使用aws发送JSON结构时出错。特别是调用将项放入现有的DynamoDB表中。

问题似乎在于,我试图发送的JSON对象中的键和值缺少双引号。我看过Powershell输出双引号非常挑剔,特别是在利用外部API时。

不幸的是,由于我的组织使用okta对AWS请求进行身份验证,所以我必须使用Powershell。

我试过这里看到的一切:

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/convertto-json?view=powershell-6

...here:

错误解析参数‘--表达式-属性值’:无效的JSON:期望以双引号括起来的属性名称:第1行,第3列(char 2)

...here:

https://github.com/aws/aws-cli/issues/1326

...and在这里:

PowerShell:在传递给外部程序的字符串中转义双引号的最佳方法?例如,JSON字符串

我尝试过的:

这是基本的第一次尝试:

代码语言:javascript
复制
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

然后我试着用反斜杠逃跑:

代码语言:javascript
复制
okta-aws dh dynamodb put-item --table-name AlexaRoomLookup-dev --item {\"deviceId\":{\"S\":\"amzn1.ask.device.AEH2LHYGV7GSPP5THMR5H56AI2OOMAQ7MF54CZ3E6WR433WGS6QAOCYCKJWRJ3TQY5IE76NWR2IKCANB6TJNKLDEZOO2YN6ACUVT33MKSS4CO6R7GJI6GDFLOBOPUA2IXX7RI732UXJ6PDST5KYC7CSQK634K4APEBRNVOKVZIDECOCBBIFB4\"},\"roomNumber\": {\"N\":9110}} --return-consumed-capacity TOTAL

然后用反勾号(我在这里用星号替换它,所以将它作为代码读取)和反斜杠:

代码语言:javascript
复制
{*"deviceId*": {*"S*":*"amzn1.ask.device.AEH2LHYGV7GSPP
5THMR5H56AI2OOMAQ7MF54CZ3E6WR433WGS6QAOCYCKJWRJ3TQY5IE76NWR2IKCANB6TJNKLDEZOO2YN6ACUVT33MKSS4CO6R7GJI6GDFLOBOPUA2IXX7RI732UXJ6PDST5KYC
7CSQK634K4APEBRNVOKVZIDECOCBBIFB4*"},*"roomNumber*": {*"N*":9110}}" --return- consumed-capacity TOTAL

然后,我尝试了一个“这里的字符串”,但没有结果。

的期望和结果:

我希望微软文档中的一种转义方法能够正常工作。

上面的每一个错误都是根据转义方法对有问题的"JSON接收的“进行了修改,但在键和值周围从来没有双引号:

代码语言:javascript
复制
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“作为输入项,我在任何地方都找不到文档.我想是在我联系过的github线上。但是,我不希望每次发送带有API调用的JSON时都编辑一个文件.下面是:

代码语言:javascript
复制
okta-aws dh dynamodb put-item --table-name AlexaRoomLookup-dev --item file://file.json --return-consumed-capacity TOTAL

除了这里列出的信息之外,还有人能提供关于为什么上述方法不能工作的信息吗?我刚才是不是不正确地实现了它们?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-15 00:08:25

在使用PowerShell向Amazon发送消息时,我遇到了同样的问题。在尝试了不同的转义字符之后,下面的内容对我起了作用。

代码语言:javascript
复制
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

票数 8
EN

Stack Overflow用户

发布于 2019-06-18 22:15:05

您可以在命令的开头尝试PowerShell“停止解析符号”(即"--%")。这告诉PowerShell逐字使用其余的参数。

代码语言:javascript
复制
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

更多细节见解析 ..。

如果您的json在变量中,它不会有帮助,但是如果它像上面的示例那样是硬编码的,它可能会起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56650816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档