Проблема в том, что вы смешали строки и объекты в своем классе 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
, поскольку он является окончательным.