是否可以使用lift JSON、argonaut等对JSON结构进行深度合并
{
"metrics": [{
"name": "abcde",
"tags": {
"oId": ["pqrs"],
"uuid": ["A123-B234"],
"entityType": ["test"],
"entityName": ["test"]
},
"aggregators": [{
"name": "sum",
"sampling": {
"value": 40,
"unit": "seconds"
}
}]
}],
"cache_time": 0,
"start_relative": {
"value": 8,
"unit": "hours"
}
}我正在尝试将一个新属性("instance“:"PQRSTUW”)深度合并到"metrics“/ "tags”结构中
屈从
{
"metrics": [{
"name": "abcde",
"tags": {
"orgId": ["pqrs"],
"vcuuid": ["A123-B234"],
"entityType": ["test"],
"entityName": ["test"],
"instance" : ["PQRSTUW"]
},
"aggregators": [{
"name": "sum",
"sampling": {
"value": 40,
"unit": "seconds"
}
}]
}],
"cache_time": 0,
"start_relative": {
"value": 8,
"unit": "hours"
}
}这个是可能的吗?
发布于 2014-01-29 17:17:24
您可以使用Jackson库。如下例所示:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
public class JacksonProgram {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
ArrayNode instanceArray = new ArrayNode(mapper.getNodeFactory());
instanceArray.add("PQRSTUW");
JsonNode rootNode = mapper.readTree("{... json ...}");
JsonNode metricsNode = rootNode.get("metrics");
JsonNode firstArrayElement = metricsNode.elements().next();
ObjectNode tagsNode = (ObjectNode)firstArrayElement.get("tags");
tagsNode.put("instance", instanceArray);
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode));
}
}上面的程序打印:
{
"metrics" : [ {
"name" : "abcde",
"tags" : {
"oId" : [ "pqrs" ],
"uuid" : [ "A123-B234" ],
"entityType" : [ "test" ],
"entityName" : [ "test" ],
"instance" : [ "PQRSTUW" ]
},
"aggregators" : [ {
"name" : "sum",
"sampling" : {
"value" : 40,
"unit" : "seconds"
}
} ]
} ],
"cache_time" : 0,
"start_relative" : {
"value" : 8,
"unit" : "hours"
}
}发布于 2014-01-28 15:52:02
Argonaut在Json类型上有一个深度合并方法,它就是这样做的。
https://stackoverflow.com/questions/21398619
复制相似问题