我好像搞不懂。 我试图在GSON JSON树操作,但我有一个情况下,我不知道或有一个POJO转换成字符串,在转换为JsonObject之前。有没有办法直接从字符串到JsonObject?

我尝试了以下(Scala语法):

val gson = (new GsonBuilder).create

val a: JsonObject = gson.toJsonTree("""{ "a": "A", "b": true }""").getAsJsonObject
val b: JsonObject = gson.fromJson("""{ "a": "A", "b": true }""", classOf[JsonObject])

但是a失败,JSON将被转义并解析为JsonString,并且 b返回一个空的JsonObject。

什么好主意吗?


当前回答

最简单的方法是使用JsonPrimitive类,它派生自JsonElement,如下所示:

JsonElement element = new JsonPrimitive(yourString);
JsonObject result = element.getAsJsonObject();

其他回答

我相信这是一个更简单的方法:

public class HibernateProxyTypeAdapter implements JsonSerializer<HibernateProxy>{

    public JsonElement serialize(HibernateProxy object_,
        Type type_,
        JsonSerializationContext context_) {
        return new GsonBuilder().create().toJsonTree(initializeAndUnproxy(object_)).getAsJsonObject();
        // that will convert enum object to its ordinal value and convert it to json element

    }

    public static <T> T initializeAndUnproxy(T entity) {
        if (entity == null) {
            throw new 
               NullPointerException("Entity passed for initialization is null");
        }

        Hibernate.initialize(entity);
        if (entity instanceof HibernateProxy) {
            entity = (T) ((HibernateProxy) entity).getHibernateLazyInitializer()
                    .getImplementation();
        }
        return entity;
    }
}

然后你可以这样调用它:

Gson gson = new GsonBuilder()
        .registerTypeHierarchyAdapter(HibernateProxy.class, new HibernateProxyTypeAdapter())
        .create();

这样,所有hibernate对象都将自动转换。

使用JsonParser;例如:

JsonObject o = JsonParser.parseString("{\"a\": \"A\"}").getAsJsonObject();
//import com.google.gson.JsonObject;  
JsonObject complaint = new JsonObject();
complaint.addProperty("key", "value");

jsonparser #parse(java.lang.String)现在已弃用

所以使用com.google.gson。JsonParser#parseString,它工作得很好

芬兰湾的科特林的例子:

val mJsonObject = JsonParser.parseString(myStringJsonbject).asJsonObject

Java示例:

JsonObject mJsonObject = JsonParser.parseString(myStringJsonbject).getAsJsonObject();

JsonParser构造函数已弃用。请使用静态方法:

JsonObject asJsonObject = JsonParser.parseString(someString).getAsJsonObject();