java - 在 Java 中将 DynamoDB JSON 文档转换为 JSON 对象

标签 java json amazon-web-services amazon-dynamodb deserialization

我正在读取具有 DynamoDB JSON 格式的备份 DynamoDB S3 存储桶。

我正在尝试将其转换为没有 AttributeValue 的普通 JSON。

原始字符串

{
  "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()));

此外,当我调试时,我无法正确创建 map 。映射将包含作为“id”的键,作为 AttributeValue 的值,但是 AttributeValue将在其自己的 Map<String, AttributeValue> 中包含该字符串而不是内部String s

我觉得在创建 map 时遗漏了一些东西。有什么指点吗?

Stackoverflow 上的引用资料: Link 1 Link 2

最佳答案

您所描述的结果听起来是正确的。如果查看原始 JSON 字符串,您会看到一个键:值对列表,其中每个值都是另一个键:值对列表(长度为 1,但仍然是一个列表)。

要将其转换为键:值对的单个列表,您需要编写一个map-reduce类型的循环。基本上迭代第一个映射,获取键,然后从第二个映射(这是您刚刚记录的键的值)中,只需获取第一个条目的值(AttributeValue)并将该键:值对添加到新映射中( Map<String, AttributeValue> ,您在循环之前定义)。然后,您可以将该映射转换为 JSON,它将生成您期望的 JSON 字符串。

希望有帮助!

关于java - 在 Java 中将 DynamoDB JSON 文档转换为 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51333945/

相关文章:

amazon-web-services - 我的 ENI 是如何创建的?

node.js - AWS lambda nodejs 运行时 : io: read/write on closed pipe

java - java中的合约

java - 如何在构建 java 项目期间将 *.class 文件打开为依赖项?

ruby - 使用 JSON 字符串分配变量

Android Json 图像解析到 recyclerView with picasso

java - 在 Elasticsearch 中索引 spark Dataset<Row> 时出错。

java - 在 SWT 中编辑树后未反射(reflect)更改

json - Grails-渲染的Json文件太大,无法进行客户端操作

amazon-web-services - 如何对使用层方法的 lambda 逻辑进行单元测试?