我知道DynamoDBMapper,但在我的情况下,我不能使用它,因为我事先不知道所有的属性。
我有一个JSON,它通过使用Jackson
解析器解析为对象的Map:
Map<String, Object> userData = mapper.readValue(new File("user.json"), Map.class);
遍历每个属性,如果DynamoDB AttributeValue
支持Boolean、String、Number、Bytes、List等,如何将值转换为AttributeValue
?
有没有一个有效的方法来做到这一点?现在已经有图书馆了吗?我的简单方法是检查每个值是否是Boolean/String/Number/等类型。然后调用适当的AttributeValue
方法,例如:new AttributeValue().withN(value.toString())
-这给了我一长串if, else if
5条答案
按热度按时间beq87vna1#
最后通过查看AWS如何解析JSON来弄清楚
基本上,这是代码:
很整洁。
wljmcqd82#
以下是一个简单的解决方案,可用于将任何DynamoDB JSON转换为Simple JSON。
这将以
List<Map<String,Object>>
的形式生成所需的Json,它是object
的子集。omvjsjqw3#
我使用JacksonConverterImpl将
JsonNode
转换为Map<String, AttributeValue>
希望这有帮助!
谢了,杰
huwehgph4#
对于2.x SDK,我还没有确定SDK提供的等效功能。作为练习,我决定用switch表达式来解决这个问题
此实现将编组Map、记录、原语、字节数组、集合类型,并将在未知类型上调用
toString()
。我唯一没有实现的数据类型是字节集(BS),因为确定唯一的字节数组值并不是那么简单。您可以添加对bean属性的支持,但我认为这会容易出错,因此决定默认只支持
toString
。也包括
unmarshal
作为练习。wz1wpwve5#
对于2.x SDK,使用
DynamoDBEnhancedClient
。下面是一个完整的例子:https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javav2/example_code/dynamodb/src/main/java/com/example/dynamodb/enhanced/EnhancedPutItem.java