2012-01-16 4 views
2

com.google.gson.JsonObject보다 작은 유창한 래퍼를 쓰고 있습니다. 내 JSON 직렬화 할 때따옴표없이 JsonObject를 직렬화하는 방법은 무엇입니까?

, 내가 얻을 :

{"key1":"value1","key2":"value2","key3":"{\"innerKey\":\"value3\"}"} 

어떻게 중복 따옴표 제거합니까?

내 코드 :

public class JsonBuilder { 
    private final JsonObject json = new JsonObject(); 
    private final Map<String, JsonBuilder> children = newHashMap(); 

    public String toJson() { 
     for (Map.Entry<String, JsonBuilder> entry : children.entrySet()) { 
      String value = entry.getValue().toJson(); 
      add(entry.getKey(), value); 
     } 
     children.clear(); 

     return json.toString(); 
    } 

    public JsonBuilder add(String key, String value) { 
     json.addProperty(key, value); 
     return this; 
    } 

    public JsonBuilder add(String key, JsonBuilder value) { 
     Preconditions.checkArgument(!children.containsKey(key)); 
     children.put(key, value); 
     return this; 
    } 
} 

String json = new JsonBuilder() 
    .add("key1", "value1") 
    .add("key2", "value2") 
    .add("key3", new JsonBuilder() 
     .add("innerKey", "value3")) 
    .toJson(); 
+0

json 구문은 사용하지 못하게하는 방법이 없다고 생각합니다. 그 (것)들을 제거하는 어떤 특정한 이유? – kosa

답변

3

여기서 문제는 문자열의와 객체의 당신의 JsonBuilder 클래스에서 혼합 한 것입니다. 오히려 JsonObject에 최대한 가깝게 붙여야하며 약간만 연장하십시오. 당신이 JsonBuilder 포장하려는 경우 JsonObject에 가능한 가장 작은 수정과, 이런 식으로 할 : 나는 json 재산 공개했습니다

package com.craigmj.gson; 

import java.util.HashMap; 

import com.google.gson.JsonObject; 

class JsonBuilder { 
    public final JsonObject json = new JsonObject(); 

    public String toJson() { 
     return json.toString(); 
    } 

    public JsonBuilder add(String key, String value) { 
     json.addProperty(key, value); 
     return this; 
    } 

    public JsonBuilder add(String key, JsonBuilder value) { 
     json.add(key, value.json); 
     return this; 
    } 
} 

public class GsonTest { 

    public static void main(String[] args) { 

     System.out.println(new JsonBuilder() 
      .add("key1", "value1") 
      .add("key2", "value2") 
      .add("key3", new JsonBuilder() 
      .add("innerKey", "value3")) 
      .toJson()); 
    } 

} 

참고 여전히 그것으로 모든 GSON 방법을 사용할 수 있도록 완전한 gson 기능을 원한다면 (물론 getter가 있어야합니다.) 불행히도 JsonObject은 최종본이므로 확장 할 수 없습니다.

1

gson.toJsonTree()를 대신 사용하십시오.

관련 문제