Java 如何在没有太多引号的情况下序列化JsonObject?
我正在com.google.gson.JsonObject上编写一个小的fluent包装 当我序列化Json时,我得到:Java 如何在没有太多引号的情况下序列化JsonObject?,java,json,gson,Java,Json,Gson,我正在com.google.gson.JsonObject上编写一个小的fluent包装 当我序列化Json时,我得到: {"key1":"value1","key2":"value2","key3":"{\"innerKey\":\"value3\"}"} 我如何去掉多余的引号 我的代码: public class JsonBuilder { private final JsonObject json = new JsonObject(); private final Map
{"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();
公共类JsonBuilder{
私有最终JsonObject json=新JsonObject();
private final Map children=newHashMap();
公共字符串toJson(){
对于(Map.Entry:children.entrySet()){
String value=entry.getValue().toJson();
添加(entry.getKey(),value);
}
儿童。清除();
返回json.toString();
}
公共JsonBuilder添加(字符串键、字符串值){
addProperty(键、值);
归还这个;
}
公共JsonBuilder添加(字符串键,JsonBuilder值){
先决条件.checkArgument(!children.containsKey(key));
儿童。放置(键、值);
归还这个;
}
}
String json=new JsonBuilder()
.添加(“键1”、“值1”)
.添加(“键2”、“值2”)
.add(“key3”,新JsonBuilder()
.add(“innerKey”、“value3”))
.toJson();
这里的问题是在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方法。(当然,您可能应该有一个getter。)不幸的是,不能扩展JsonObject
,因为它是最终的。使用gson.toJsonTree()代替。您可以看看这个
Jackson jr是完整Jackson数据绑定组件的紧凑替代品。这是json语法,我认为没有办法禁用它。删除它们的具体原因是什么?下划线java库有U.objectBuilder()和U.arrayBuilder()方法。