read - java gson utf8




Gson: String direkt in JsonObject konvertieren(kein POJO) (6)

Kann das nicht herausfinden. Ich versuche JSON-Baum-Manipulation in GSON, aber ich habe einen Fall, in dem ich nicht weiß, oder haben ein POJO, um eine Zeichenfolge zu konvertieren, vor der Konvertierung in JsonObject . Gibt es eine Möglichkeit, direkt von einem String zu JsonObject zu JsonObject ?

Ich habe folgendes versucht (Scala-Syntax):

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])

aber a JsonString , der JSON wird nur als JsonString und analysiert, und b gibt ein leeres JsonObject .

Irgendwelche Ideen?


Der einfachste Weg ist die Verwendung der JsonPrimitive Klasse, die von JsonElement , wie unten gezeigt:

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

Es ist ein Szenario mit der Remote-Sortierung des Datenspeichers in EXTJS 4.X aufgetreten, bei dem die Zeichenfolge als JSON-Array (nur 1 Objekt) an den Server gesendet wird.
Ein ähnlicher Ansatz zu dem, was zuvor für eine einfache Zeichenfolge dargestellt wurde, erfordert lediglich die Konvertierung in JsonArray vor JsonObject.

Zeichenfolge vom Client: [{"property": "COLUMN_NAME", "direction": "ASC"}]

String jsonIn = "[{\"property\":\"COLUMN_NAME\",\"direction\":\"ASC\"}]";
JsonArray o = (JsonArray)new JsonParser().parse(jsonIn);

String sortColumn = o.get(0).getAsJsonObject().get("property").getAsString());
String sortDirection = o.get(0).getAsJsonObject().get("direction").getAsString());

Ich glaube, das ist ein einfacher Ansatz:

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;
    }
}

Und dann kannst du es so nennen:

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

Auf diese Weise werden alle überwinterten Objekte automatisch konvertiert.


Versuchen Sie, getAsJsonObject () anstelle eines in der akzeptierten Antwort verwendeten Straight Casts zu verwenden:

JsonObject o = new JsonParser().parse("{\"a\": \"A\"}").getAsJsonObject();

//import com.google.gson.JsonObject;  
JsonObject complaint = new JsonObject();
complaint.addProperty("key", "value");

String jsonStr = "{\"a\": \"A\"}";

Gson gson = new Gson();
JsonElement element = gson.fromJson (jsonStr, JsonElement.class);
JsonObject jsonObj = element.getAsJsonObject();






gson