2012-01-16 2 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

ответ

3

Проблема здесь состоит в том, что вы смешан струны и объекта в вашем JsonBuilder классе. Скорее придерживайтесь как можно ближе к 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. (Конечно, у вас, вероятно, есть геттер.) К сожалению, нельзя продлить JsonObject, так как он является окончательным.

1

Используйте gson.toJsonTree() вместо этого.

Смежные вопросы