Gson: 문자열을 Json Object로 직접 변환(POJO 없음)
이해할 수 없을 것 같아.GSON에서 JSON 트리 조작을 시도하고 있는데 변환하기 전에 문자열을 변환하는 POJO를 모르거나 변환해야 하는 경우가 있습니다.JsonObject
에서 직접 가는 방법이 있나요?String
로.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
.
좋은 생각 있어요?
예를 들어 JsonParser를 사용합니다.
JsonObject o = JsonParser.parseString("{\"a\": \"A\"}").getAsJsonObject();
사용해보십시오.getAsJsonObject()
인정된 답변에 사용된 스트레이트 캐스트 대신:
JsonObject o = new JsonParser().parse("{\"a\": \"A\"}").getAsJsonObject();
String jsonStr = "{\"a\": \"A\"}";
Gson gson = new Gson();
JsonElement element = gson.fromJson (jsonStr, JsonElement.class);
JsonObject jsonObj = element.getAsJsonObject();
가장 간단한 방법은,JsonPrimitive
에서 유래한 클래스JsonElement
다음과 같이 합니다.
JsonElement element = new JsonPrimitive(yourString);
JsonObject result = element.getAsJsonObject();
방금 같은 문제가 발생했습니다.에 대한 간단한 커스텀 디시리얼라이저를 작성할 수 있습니다.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();
그JsonParser
생성자가 더 이상 사용되지 않습니다.대신 static 방식을 사용합니다.
JsonObject asJsonObject = JsonParser.parseString(someString).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();
이렇게 하면 모든 휴지 상태 개체가 자동으로 변환됩니다.
EXTJS 4.X에서 문자열을 JSON 어레이로 서버에 송신하는 데이터 스토어의 리모트 정렬 시나리오가 있습니다(1개의 오브젝트만).
단순한 문자열에 대해 이전에 설명한 것과 유사한 접근 방식으로, JsonObject보다 먼저 JsonArray로 변환하면 됩니다.
클라이언트로부터의 문자열: [{"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());
//import com.google.gson.JsonObject;
JsonObject complaint = new JsonObject();
complaint.addProperty("key", "value");
com.google.gson.JsonParser#parse(java.lang.String)
폐지되었습니다.
그러니까 쓰세요com.google.gson.JsonParser#parseString
, 꽤 잘 작동합니다.
Kotlin의 예:
val mJsonObject = JsonParser.parseString(myStringJsonbject).asJsonObject
Java의 예:
JsonObject mJsonObject = JsonParser.parseString(myStringJsonbject).getAsJsonObject();
언급URL : https://stackoverflow.com/questions/4110664/gson-directly-convert-string-to-jsonobject-no-pojo
'programing' 카테고리의 다른 글
TypeError: state.categoriesState.푸시는 VUEX 함수가 아닙니다. (0) | 2022.08.11 |
---|---|
Vuex 모듈을 추가할 때 "rawModule is defined"라고 표시되는 이유는 무엇입니까? (0) | 2022.08.11 |
오브젝트 및 어레이 소품이 아이 컴포넌트의 문자열이 되는 이유는 무엇입니까? (0) | 2022.08.10 |
메이븐은 이론적으로나 실제로 어떤 일을 합니까?언제 사용할 가치가 있습니까? (0) | 2022.08.10 |
포인터 배열에 대한 C 포인터 명확화 (0) | 2022.08.10 |