Глубокое слияние данных JSON
Можно ли глубоко объединить структуру JSON, используя 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"
}
}
Это возможно?
2 ответа
Ты можешь использовать 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"
}
}
У Argonaut есть метод Deepmerge для типа Json, который делает именно это.