Ошибка отправки структуры JSON с использованием aws-cli в Powershell.В частности, вызов для помещения элемента в существующую таблицу DynamoDB.
Кажется, что проблема в том, что не хватает двойных кавычек вокруг ключей и значений в объекте JSON, который я пытаюсь отправить.Я читал, что Powershell привередлив в выводе двойных кавычек, особенно при использовании внешних API.
К сожалению, поскольку моя организация использует okta для аутентификации запросов AWS, я должен использовать Powershell.
Я перепробовал все, что видел здесь:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/convertto-json?view=powershell-6
... здесь:
Ошибка анализа параметра '--expression-attribute-values': неверный JSON: ожидаемое имя свойства заключено в двойные кавычки: строка 1, столбец 3 (char 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
I тогдапопробовал "здесь строку" безрезультатно.
ОЖИДАНИЯ И РЕЗУЛЬТАТЫ:
Я ожидаю, что метод экранирования, описанный в документации Microsoft, будет работать.
Каждый из вышеперечисленных выдает эту ошибку с вариацией проблемного «JSON полученный» на основе метода escape, но он никогда не имел двойных кавычек вокруг ключей и значений:
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, который я связал.Тем не менее, я бы предпочел не редактировать файл каждый раз, когда я хочу отправить JSON с помощью вызова API AWS ... Вот оно:
okta-aws dh dynamodb put-item --table-name AlexaRoomLookup-dev --item file://file.json --return-consumed-capacity TOTAL
Может ли кто-нибудь предоставить информацию, отличную от того, что указано здесь какпочему вышеупомянутые методы не будут работать?Я только что реализовал их неправильно?
Спасибо.