1

リフト 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"
}
}

これは可能ですか?

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 に答える