java

JSON 구조 간소화 방법

주피터0410 2026. 1. 28. 13:41

원문구조

"data" : {
	"output" : {
		  "able": {
			"label" : "활성여부",
			"default" : "",
			"type" : "String",
			"value" : "N",
			"desc" : "임시",
		  },
		  "state": {
			"label" : "상태",
			"default" : "",
			"type" : "String",
			"value" : "2",
			"desc" : "",
		  },
	},
	"status" : {
		  "name": "ok",
		  "flag": 2,
		  "isStudent": false,
	}
}

 

간소화 구조

{
  "output": {
    "able": "N",
    "state": "2",
    "name": "ok",
    "flag": 2,
    "isStudent": false
  }
}

 

ObjectMapper mapper = new ObjectMapper();

        String json = """
        {
		  "data" : {
			  "output": {
				"able": {
				  "label": "활성여부",
				  "default": "",
				  "type": "String",
				  "value": "N",
				  "desc": "임시"
				},
				"state": {
				  "label": "상태",
				  "default": "",
				  "type": "String",
				  "value": "2",
				  "desc": ""
				}
			  },
			  "status": {
				"name": "ok",
				"flag": 2,
				"isStudent": false
			  }

		  }
        }
        """;

        JsonNode root = mapper.readTree(json);
        ObjectNode resultOutput = mapper.createObjectNode();

        // 1. output.value 추출
        JsonNode dataNode = root.get("output");
        JsonNode outputNode = dataNode.get("output");
        Iterator<Map.Entry<String, JsonNode>> fields = outputNode.fields();

        while (fields.hasNext()) {
            Map.Entry<String, JsonNode> entry = fields.next();
            resultOutput.set(entry.getKey(), entry.getValue().get("value"));
        }

        // 2. status 그대로 합치기
        JsonNode statusNode = root.get("status");
        statusNode.fields().forEachRemaining(e ->
            resultOutput.set(e.getKey(), e.getValue())
        );

        ObjectNode result = mapper.createObjectNode();
        result.set("output", resultOutput);

        System.out.println(
            mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result)
        );