DynamoDB:如何创建一个具有嵌套JSON结构的表格?
DynamoDB:如何创建一个具有嵌套JSON结构的表格?
我想在DynamoDB中创建一个具有以下结构的表。
{
"CartId": 123,
"UserId": 356,
"CartItems": [
{
"ProductId": 100,
"Quantity": 50
},
{
"ProductId": 121,
"Quantity": 51
}
]
}
在教程和文档中,到处都说我们只能在表中使用以下类型的属性:
- 字符串集合
- 数字集合
- 二进制集合
我想不出在DynamoDB中存储上述结构的方法。你能帮忙一下吗?
我正在使用Java的对象映射器API。如果能告诉我如何创建一个可以映射到这个特定表结构的类,那就太好了。
在这个问题中,用户想知道如何在DynamoDB中创建一个具有嵌套JSON结构的表。解决这个问题的方法是通过创建一个与所需结构相匹配的复杂Java对象,然后使用更新方法将该对象添加到DynamoDB项中。
首先,用户需要创建一个复杂的Java对象,该对象的结构与所需的结构相匹配。在这个例子中,用户创建了一个名为"cartItems"的列表,其中包含多个HashMap对象,每个HashMap对象都包含"ProductId"和"Quantity"两个属性。
接下来,用户需要使用一个辅助方法将复杂对象添加到DynamoDB项中。这个辅助方法接受三个参数:id(项的唯一标识符),newAttribute(要更新的属性名称)和newValue(要更新的属性的新值)。该方法使用UpdateItemSpec对象构建一个更新请求,并将新值添加到值映射中。最后,用户可以调用这个辅助方法来更新DynamoDB项。
更新完成后,用户可以在DynamoDB中看到新添加的cartItems属性,它以嵌套的JSON格式显示。
需要注意的是,这个方法没有测试upsert场景,因为在过去的经验中,似乎没有upsert功能可用。用户还提到了有关读取深层嵌套项的一些文档链接,供其他人参考。
希望这篇文章对大家有所帮助。
问题的原因是想要在DynamoDB中创建一个具有嵌套JSON结构的表。作者想要存储一个深度嵌套的JSON文档,并且希望在Java实体中定义列属性来实现。
解决方法是在Java实体中定义一个私有成员变量,类型为List
以下是解决方法的代码示例:
private List
输入的JSON如下:
{
"userId": 359628,
"platform": "learn-web",
"inactive_duration": 0,
"total_time": 15,
"device_type": "web",
"page_data": [{
"page_details": {
"page_type": "segmentView",
"time": 15,
"segment_id": 65590,
"session_id": 13140,
"module_id": 4363
},
"items": [{
"type": "component",
"id": 267307,
"sub_type": "video",
"time": 10,
"metadata": {
"lastPlaybackRate": 1,
"currentTime": 0,
"isLocked": false,
"video": {
"videoType": "BRIGHTCOVE",
"viewingTime": 156,
"videoSize": 7120441,
"url": "5378655747001",
"URL": "5378655747001"
}
}
}]
}]
}
还有一个链接,以展示存储在DynamoDB中的JSON数据的快照。
请注意,这种解决方法可能不适用于所有情况。
在使用DynamoDB创建具有嵌套JSON结构的表时,可能会遇到以下问题和解决方法。
问题的原因:
在DynamoDB中创建具有嵌套JSON结构的表时,可能会遇到如何映射JSON数据到POJO(Plain Old Java Object)的问题。这可能涉及到使用Maven依赖、创建POJO和创建repository。
解决方法:
下面是解决该问题的步骤:
1. 添加Maven依赖:
在项目的pom.xml文件中添加以下Maven依赖:
com.amazonaws aws-java-sdk-dynamodb 1.11.186
2. 创建POJO:
创建一个POJO类,例如Customer类,并在该类中包含嵌套的JSON结构。例如:
(tableName = "Customer") public class Customer { private String id; private String firstName; private ListfooList; } public static class Foo { private String name; }
3. 创建repository:
创建一个repository接口,该接口应继承CrudRepository,并指定POJO类和主键类型。例如:
public interface CustomerRepository extends CrudRepository{ }
4. 保存数据:
使用repository的save方法来保存数据。例如:
customerRepository.save(customer);
这样保存的数据将类似于以下JSON结构:
{
"firstName": "Test",
"fooList": [
{
"name": "foo"
},
{
"name": "foo2"
}
],
"id": "e57dd681-8608-4712-a39a-f3e0f31a5e27"
}
在使用上述解决方法时,如果向内部类中添加新字段,那么这些字段也将存在于DynamoDB中。此外,如果需要将通用的JSON映射到POJO中,可以使用类似的方法。