Gson : String을 JsonObject로 직접 변환 (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를 사용하십시오. 예를 들면 다음과 같습니다.
JsonParser parser = new JsonParser();
JsonObject o = parser.parse("{\"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();
나는 이것이 더 쉬운 접근법이라고 믿습니다.
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");
참고 URL : https://stackoverflow.com/questions/4110664/gson-directly-convert-string-to-jsonobject-no-pojo
'IT' 카테고리의 다른 글
JavaScript 함수가 정의되어 있는지 확인하는 방법 (0) | 2020.03.20 |
---|---|
동일한 그래프에서 ggplot2를 사용하여 두 변수를 선으로 플로팅 (0) | 2020.03.20 |
HTML5 양식 필수 속성 (0) | 2020.03.20 |
브라우저에서 Jupyter / ipython 노트북의 셀 너비를 늘리려면 어떻게합니까? (0) | 2020.03.20 |
PHPMyAdmin에서 가져 오기 파일 크기 제한 (0) | 2020.03.20 |