我正在尝试在dynamodb中使用Map数据类型来插入我的JSON对象。我从外部API获得的JSON有点长,并且在其中嵌套了对象数组。 (我正在使用nodejs。)
{
"a": "foo",
"b": "foo1",
"c": [{
"boo": 10,
"boo1": 15
}, {
"boo": 19,
"boo1": 45
}, {
"boo": 11,
"boo1": 25
}]
}
从我到目前为止所做的研究看起来我必须为我试图插入/更新的json中的每个元素指定类型。这使得它变得更难,因为在我的情况下,json可以有任何东西。
如果有人遇到同样的问题并且知道任何解决方案,请告诉我。
答案 0 :(得分:2)
只有在使用低级别AmazonDB API时,才需要为每个值指定确切的类型。
但您可以使用AWS SDK使事情变得更加容易,您可以直接使用json表示法。
我没有使用node.js SDK(有使用python SDK的经验),但是查看examples,对于node.js也是如此。
检查一下:
var AWS = require("aws-sdk");
AWS.config.update({
region: "us-west-2",
endpoint: "http://localhost:8000"
});
var docClient = new AWS.DynamoDB.DocumentClient();
var table = "Movies";
var year = 2015;
var title = "The Big New Movie";
var params = {
TableName:table,
Item:{
"year": year,
"title": title,
"info":{
"plot":"Something happens."
}
}
};
console.log("Adding a new item...");
docClient.put(params, function(err, data) {
if (err) {
console.error("Unable to add item. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("Added item:", JSON.stringify(data, null, 2));
}
});
传递到Item
调用的params
内的docClient.put
只是一个普通的javascript对象。
答案 1 :(得分:1)
dynamodb必须知道您要插入/更新的数据类型。所以dynamodb或任何db只允许
特定于该列的数据类型。如果您希望将json(使用Jackson api)解析为特定类型并插入。以下是代码
JsonParser parser = new JsonFactory().createParser(new File(
"target/resources/json_file.json"));
JsonNode rootNode = new ObjectMapper().readTree(parser);
Iterator<JsonNode> iter = rootNode.iterator();
ObjectNode currentNode;
while (iter.hasNext()) {
currentNode = (ObjectNode) iter.next();
table.putItem(new Item().withPrimaryKey("a", currentNode.path("a").asText(), "b",
currentNode.path("b").asText()).withJSON("c",currentNode.path("c").toString()));
}
JsonParser parser = new JsonFactory().createParser(new File(
"target/resources/json_file.json"));
JsonNode rootNode = new ObjectMapper().readTree(parser);
Iterator<JsonNode> iter = rootNode.iterator();
ObjectNode currentNode;
while (iter.hasNext()) {
currentNode = (ObjectNode) iter.next();
table.putItem(new Item().withPrimaryKey("a", currentNode.path("a").asText(), "b",
currentNode.path("b").asText()).withJSON("c",currentNode.path("c").toString()));
}