# #go #amazon-dynamodb
Вопрос:
Я работаю над API, который принимает JSON DynamoDB свободной формы в качестве входных данных, который выглядит следующим образом и может выражать вложенные сложные типы (списки внутри карт внутри списков и т. Д.). Это входные данные, которые вы должны предоставить при создании элемента на консоли AWS.
{
"id": {
"S": "test"
},
"sort": {
"N": "0"
},
"mylist": {
"L": [
{"B": "binary-element-1"},
{"S": "string-element-2"}
]
},
"mymap": {
"M": {
"NewValue3": {
"B": "binary-within-map"
},
"NewValue4": {
"BOOL": false
}
}
}
}
Я пытаюсь преобразовать это в a map[string]*dynamodb.AttributeValue
и ввести в Item
поле объекта DynamoDB SDK Put
(doc). Однако структура данных неизвестна до анализа.
В MarshalMap()
пакете dynamodb.attributevalue
есть набор методов (в основном), которые позволяют выполнять преобразования из типов Go <-> *dynamodb.Значение атрибута. Для этого потребуются некоторые знания о структуре типов, которые недоступны.
Хотелось бы получить добрый совет о том, как этого можно достичь. преобразование также должно в идеале иметь дело с коллекциями и сложными вложенными типами (списки на картах в картах и так далее).
Большинство других потоков сосредоточены на том, чтобы структура приемника была уже четко определена, а преобразование зависело от того, что структура была известна априори, поэтому здесь это неприменимо.
Комментарии:
1. Я не знаю готового преобразователя DynamoDB JSON -> >
AttributeValue
. Однако пакет attributevalue, на который вы ссылаетесь, может преобразовать произвольный обычный старый JSON (т. Е.{"id": "test"}
) вAttributeValue
. Во-первых, json. Разархивируйте свой JSON на карту go.var plain map[string]interface{}
. Затем превратите карту в значения атрибутов, которые можно поместить в DynamoDB:av := attributevalue.Marshal(plain)
.