json - 使用 aws-cli 时如何在 Powershell 中正确格式化 JSON?
问题描述
在 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
然后我尝试用反斜杠转义:
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
然后我尝试了一个“这里的字符串”无济于事。
期望和结果:
我希望 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
除了此处列出的内容之外,任何人都可以提供有关上述方法为何不起作用的信息吗?我只是错误地实施了它们吗?
谢谢。
解决方案
我在尝试使用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
推荐阅读
- javascript - 列表中复选框上的 onclick 事件
- mysql - 如何找到 phpmyadmin SQL 密码加密类型?
- c# - 无法将数据从一个 GridView 复制到另一个 ASP.NET C#
- angular - Angular 2 Typescript 在登录/注销时重新加载组件
- javascript - 在 DOM 中堆叠多个画布或在一个画布中控制所有绘图更好吗?
- r - 当对不同的主成分组合进行回归时,回归系数不会改变
- graphql - Gatsby 源 API 服务器转换属性名称并不允许 GraphQL 查询
- xamarin.forms - Xamarin 表单 (ios):以编程方式连接到 wifi 时出现运行时异常
- r - R - 计算 flexsurvreg 或 aftreg 对象的残差
- ios - NavigationBar中的iOS 10后退按钮宽度