322

これを理解できないようです。GSON で JSON ツリー操作を試みていますが、変換する前に、文字列を変換する POJO がわからない、または持っていない場合がありますJsonObjectStringa からtoに直接行く方法はあり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

何か案は?

4

10 に答える 10

549

JsonParserを使用します。例えば:

JsonObject o = JsonParser.parseString("{\"a\": \"A\"}").getAsJsonObject();
于 2010-12-24T15:27:47.573 に答える
148

getAsJsonObject()受け入れられた回答で使用されているストレートキャストの代わりに使用してみてください。

JsonObject o = new JsonParser().parse("{\"a\": \"A\"}").getAsJsonObject();
于 2011-06-02T18:35:41.867 に答える
60
String jsonStr = "{\"a\": \"A\"}";

Gson gson = new Gson();
JsonElement element = gson.fromJson (jsonStr, JsonElement.class);
JsonObject jsonObj = element.getAsJsonObject();
于 2013-06-20T17:53:30.037 に答える
39

最も簡単な方法は、以下に示すように、JsonPrimitiveから派生したクラスを使用することです。JsonElement

JsonElement element = new JsonPrimitive(yourString);
JsonObject result = element.getAsJsonObject();
于 2014-02-28T00:02:18.707 に答える
11

同じ問題が発生しました。JsonElementクラスの簡単なカスタムデシリアライザーを作成できます。

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

GsonBuilder gson_builder = new GsonBuilder();
gson_builder.registerTypeAdapter(
        JsonElement.class,
        new JsonDeserializer<JsonElement>() {
            @Override
            public JsonElement deserialize(JsonElement arg0,
                    Type arg1,
                    JsonDeserializationContext arg2)
                    throws JsonParseException {

                return arg0;
            }
        } );
String str = "{ \"a\": \"A\", \"b\": true }";
Gson gson = gson_builder.create();
JsonElement element = gson.fromJson(str, JsonElement.class);
JsonObject object = element.getAsJsonObject();
于 2011-01-19T13:10:49.023 に答える
4

これはより簡単なアプローチだと思います:

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

このようにして、すべての休止状態のオブジェクトが自動的に変換されます。

于 2014-08-17T07:58:23.347 に答える