我正在读取具有 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 时遗漏了一些东西。有什么指点吗?
最佳答案
您所描述的结果听起来是正确的。如果查看原始 JSON 字符串,您会看到一个键:值对列表,其中每个值都是另一个键:值对列表(长度为 1,但仍然是一个列表)。
要将其转换为键:值对的单个列表,您需要编写一个map-reduce类型的循环。基本上迭代第一个映射,获取键,然后从第二个映射(这是您刚刚记录的键的值)中,只需获取第一个条目的值(AttributeValue)并将该键:值对添加到新映射中( Map<String, AttributeValue>
,您在循环之前定义)。然后,您可以将该映射转换为 JSON,它将生成您期望的 JSON 字符串。
希望有帮助!
关于java - 在 Java 中将 DynamoDB JSON 文档转换为 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51333945/