1

是否可以使用 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"
}
}

这可能吗?

4

2 回答 2

3

你可以使用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-29T09:17:24.227 回答
1

Argonaut 在 Json 类型上有一个 deepmerge 方法,它正是这样做的。

于 2014-01-28T07:52:02.363 回答