2012-01-16 28 views
2

我正在通過com.google.gson.JsonObject編寫一個小流利的包裝器。如何在沒有太多引號的情況下序列化JsonObject?

當我我的序列化JSON,我得到:

{"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 2012-01-16 06:06:56

回答

3

這裏的問題是,你已經混在JsonBuilder String類的和對象的。寧可儘可能貼近JsonObject,並且只是稍微延長它。如果你想換一個JsonBuilder,像這樣做,用盡可能小的修改JsonObject

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()); 
    } 

} 

請注意,我做了json財產公有的,因此你仍然可以使用所有與它GSON方法如果你想要完整的gson功能。 (當然,你應該有一個getter。)不幸的是,不能擴展JsonObject,因爲它是最終的。

1

改爲使用gson.toJsonTree()。

相關問題