Преобразование JSON неизвестной структуры в map[string]*dynamodb.Значение атрибута

# #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) .