Преобразование документа DynamoDB JSON в объект JSON в Java

Я читаю резервную копию DynamoDB S3 bucket, которая имеет формат для DynamoDB Json.

Я пытаюсь преобразовать его в обычный Json без AttributeValue.

Исходная строка

{
  "id": {
    "s": "someString"
  },
  "name": {
    "b": "someByteBuffer"
  },
  "anotherId": {
    "s": "someAnotherString"
  },
  "version": {
    "n": "1"
  }
}

Пытаюсь преобразовать в

{
  "id": "someString",
  "name": "someByteBuffer",
  "anotherId": "someAnotherString",
  "version": "1"
}

Есть много ответов, на которые я ссылался, но он не преобразуется в обычный Json, он возвращает мне тот же Json.

Вот что я пробовал:

ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(inputJsonString);
final JacksonConverter converter = new JacksonConverterImpl();
Map<String, AttributeValue> map = converter.jsonObjectToMap(jsonNode);        

Item item = ItemUtils.toItem(map);

Gson gson = new Gson();
System.out.println(gson.toJson(item.asMap()));

Кроме того, во время отладки я не смог правильно создать карту. Карта будет содержать ключ как «id», значение как AttributeValue. Но AttributeValue будет содержать строку внутри своего собственного Map<String, AttributeValue>, а не внутри String s.

Я чувствую, что что-то упускаю при создании карты. Есть указатели?

Ссылки на Stackoverflow: Ссылка 1Ссылка 2

Спасибо,

Джей

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
2 153
1

Ответы 1

То, что вы описываете как результат, звучит правильно. Если вы посмотрите на исходную строку JSON, у вас есть список пар ключ: значение, где каждое значение является другим списком пар ключ: значение (длина 1, но все же список).

Чтобы преобразовать это в единый список пар ключ: значение, вам нужно написать цикл типа map-reduce. В основном выполните итерацию первой карты, возьмите ключ, затем из второй карты (которая является значением для ключа, который вы только что записали), просто возьмите значение первой записи (AttributeValue) и добавьте эту пару ключ: значение в новую карту ( Map<String, AttributeValue>, который вы определяете перед циклом). Затем эту карту вы можете преобразовать в JSON, и в результате получится строка JSON, которую вы ожидали.

Надеюсь, это поможет!

После прочтения документации docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/‌… кажется, что вы можете захотеть взять значение AttributeValue, преобразовать его в String, а затем добавить его в Map<String, String> вместо Map<String, AttributeValue>. Попробуйте оба варианта и посмотрите, каков ваш результат.

PVDM 14.07.2018 02:48

Другие вопросы по теме