2015-02-04 2 views
0

잭슨의 문서는 끔찍한 것이며 객체와 스트림에서 JSON을 어떻게 생성 할 수 있는지에 대해서만 언급하고 있습니다. 더 많은 예제/문서를 검색 할 수있는 용어를 찾을 수 없습니다.Jackson은 JSON 값을 생성 하시겠습니까?

다음과 같이하고 싶습니다.

JsonObject jsonObject = new JsonObject().add("type", "unregister").add("id",id); 
return jsonObject.toString(); 

예를 들어 {"type":"unregister","id":2}을 반환합니다. 누구든지 올바른 방향으로 나를 밀어 주실 수 있습니까?

+0

조각별로 JSON을 만들 수 없기 때문에. – OrangeDog

+0

@OrangeDog 당신은 잭슨을 의미합니까? 그건 틀렸어요. 당신은 분명히 할 수 있습니다. –

답변

0

잭슨지도 자바는 JSON에 개체, 그래서 그 문서는 매핑 할 경우

를 (그것이 임의로 JSON 문서를 작성하는 데 빌더 API의 종류를 제공하지 않습니다)는 무엇을 말하고 임의의 키/값을 사용하려면 Map<String, Object>을 사용하고 Jackson을 사용하여 JSON으로 변환하십시오. 당신은 이기종 맵 값을 혼합하고이 방법으로, 의사 원하는 결과를 얻을 수 있습니다 :

Map<String, Object> map = new HashMap<>(); 
map.put("type", "unregister"); 
map.put("id", id); 

StringWriter sw = new StringWriter(); 
mapper.writeValue(sw, map); // mapper is a ObjectMapper instance 
System.out.println(sw.toString()); 
+0

Jackson은 매우 깊이 설명하지 않더라도 이러한 API를 제공합니다. 'Map '를 직렬화하는 것은'ObjectNode'가 사용 가능할 때 그것을 과도하게 사용합니다. –

+0

여기에 동의하지 않으면 데이터 표현을 특정 API (Jackson API)로 묶는 것에 대해 이야기하고 있습니다. 여기서는 데이터가 제네릭 모델에서 더 잘 표현됩니다. (즉'Map'). 그의 데이터가 이미 일부 캡슐화 모델에 포함되어 있지 않다면 결과 코드는 Jackson API에 매우 구체적으로 연결될 것입니다. – Alex

+0

나는'ObjectNode'가 존재한다는 사실을 감안할 때 지나치게 많은 것을 의미합니다. 'Map '를 직렬화하는 것은 비교적 비싸지 만'ObjectNode'를 직렬화하는 것은 쉽지 않습니다. –

1

잭슨의 해당 JsonObjectObjectNode입니다. 다양한 xyzNode(...) 팩토리 메소드를 사용하여 JsonNode 하위 유형 인스턴스를 생성 할 수 있습니다. 그런 다음 ObjectNode#set(String, JsonNode)을 사용하여 추가 할 수 있습니다.

JsonNodeFactory nc = new JsonNodeFactory(false); // or true, depending 
ObjectNode root = new ObjectNode(nc); 
TextNode text = root.textNode("unregister"); 
NumericNode id = root.numberNode(2); 

root.set("type", text); 
root.set("id", id); 

그런 다음

System.out.println(node); 

당신은 또한 사용하는 ObjectMapper 통해 ObjectNode를 만들 수 있습니다

{"type":"unregister","id":2} 

생산 ObjectMapperJsonNodeFactory.

ObjectMapper mapper = new ObjectMapper(); 
ObjectNode root = mapper.createObjectNode(); 
관련 문제