2016-06-27 4 views
8

Java Data Handler의 경우 올바른 형식의 JSON을 보내지 만 Spring, Java의 결합 방식 결정, 프레임 워크를 변경하면 실제로 변경하지 않아야합니다. JSON으로 볼 수있게되면 LinkedTreeMap으로 바뀌고 JsonObject로 변환해야합니다. 이것은 JSON을 자바 객체로 직렬화/비 직렬화하는 것이 아니라 "최종 형태"는 gson JsonObject이며, 실제로 유효한 JSON을 모두 처리 할 수 ​​있어야합니다.LinkedTreeMap을 gson JsonObject로 변환하는 방법

{ 
"key":"value", 
"object": { 
    "array":[ 
     "value1", 
     "please work" 
     ] 
    } 
} 

은 당신이 "="로 대체 할 수

{key=value, object={array=[value1, please work]}} 

에 LinkedTreeMap로 .toString()의이다, 나는 그것을 참조하면, 사용하고 샘플입니다 ":", 하지만 그것에 대한 내부 견적이 없습니다

new JsonParser().parse(gson.toJson(STRING)).getAsJsonObject() 

전략.

LinkedTreeMap을 JsonObject로 변환하는 더 직접적인 방법이나 문자열에 내부 따옴표를 추가하는 라이브러리가 있거나 내부 인용 부호가 필요없는 JsonObject로 변환 할 수있는 방법이 있습니까?

+0

아마도 관련이있는 JsonObject에 직접 JSON을 역 직렬화 할 수있는 경우 : http://stackoverflow.com/questions/22285661/gson-json-and- linkedtreemap의 미묘한 부분 – Nivas

+0

이해가 안됩니다. '문자열 '을 얻으려고하십니까? 그런 다음'toJson'이'LinkedTreeMap'을 전달합니다. –

+0

JsonObject를 hook 또는 crook로 얻으려는 중입니다. LinkedTreeMap에서 JsonObject로 직접 이동할 수있는 방법이 없으므로 JsonObject로 변환 된 문자열을 얻는 적절한 방법이 있으므로 String 조작을 살펴 보았습니다. . – Bronanaza

답변

24

일반적으로 객체를 JSON으로 직렬화 한 다음 해당 JSON을 다시 구문 분석하여 JsonObject으로 다시 가져와야합니다. 다행히도 GsontoJsonTree 메서드를 제공하여 파싱을 건너 뜁니다.

LinkedTreeMap<?,?> yourMap = ...; 
JsonObject jsonObject = gson.toJsonTree(yourMap).getAsJsonObject(); 

, 당신은 단지

gson.fromJson(theJson, JsonObject.class);