gson 대상 봉인 분석
다음은 일반적인 gson 분석 서버가 되돌아오는 일반적인 방법입니다.
1. 클라이언트와 서버의 일반 gson 포맷은 고정된 포맷을 정의하여 인터페이스에서 통일적으로 처리할 수 있다. 예를 들어 아래와 같은 포맷일 수도 있고 데이터는array 수조[]일 수도 있고obj{}일 수도 있다.
{
"code": "0000",
"msg": " ",
"t": [{
"userid": "1",
"userName": " "
}, {
"userid": "1",
"userName": " "
}]
}
{
"code": "0000",
"msg": " ",
"data": {
"userid": "1",
"userName": " "
}
}
2. 이런 데이터를 해석하면 일반적으로 모두가 데이터를 분리해서 해석하는데 만약에 수조라면 어떻게 해석하고 대상이라면 어떻게 해석한다.구체적인 이런 해석은 관련 문서를 볼 수 있다.분리해석은 수요를 충족시킬 수 있지만 해석 과정에 대해 한 걸음 더 나아가서 첫 번째 단계를 완성해야만 수조 여부를 판단할 수 있다. 이렇게 하면 효율에 영향을 미친다. 3. 사실은 범형과 범형의 한 방법을 이용하여 해석된 데이터 유형을 얻을 수 있다. 먼저 우리는 기초 대상인 봉인류를 먼저 얻는다.
abstract class JsonModels {
private String msg;
private String code;
private T data;
public String getMsg() {
return msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
우리는 다음 방법에 따라 t를 얻었다. t는 사실 전달된 대상의 User 또는List이다.
Type type = getClass().getGenericSuperclass();
Type[] t = ((ParameterizedType) type).getActualTypeArguments();
T를 얻으면 Type으로 어떻게 조립하나요?원본 코드를 보면 Type에 몇 개의 실현 클래스가 있습니다. Parameterized Type을 사용하고 이 클래스를 계승한 후에 jmodel과 t를 설정하면 됩니다.
class ParameterizedTypeImpl implements ParameterizedType {
Type[] type;
Class raw;
@Override
public Type[] getActualTypeArguments() {
// TODO
return type;
}
@Override
public Type getOwnerType() {
// TODO
return null;
}
public ParameterizedTypeImpl(Type[] args, Class raw) {
super();
this.type = args != null ? args : new Type[0];
this.raw = raw;
}
@Override
public Type getRawType() {
// TODO
return raw;
}
저희가 json 해석을 Json Model에 직접 넣을 수 있어요.
public JsonModel toJsonModel(String json) {
Type type = getClass().getGenericSuperclass();
Type[] t = ((ParameterizedType) type).getActualTypeArguments();
Type ty = new ParameterizedTypeImpl(t, JsonModel.class);
return new Gson().fromJson(json, ty );
}
----이 방법 getGeneric Superclass 호출은 반드시 Json Models가 추상적인 클래스이어야 합니다. 우리는 실현 클래스를 하나 더 씁니다. 실현 클래스는 빈 채로 아무것도 쓰지 않을 수 있습니다. 아래와 같습니다.
class JsonModel extends JsonModels{}
현재 기본류는 이미 다 썼으니 다음은 바로 호출하는 것이다.
public static void main(String args[]) {
// String json="{\"code\":\"0000\",\"msg\":\" \",\"data\":[{\"userid\":\"1\",\"userName\":\" \"},{\"userid\":\"1\",\"userName\":\" \"}]}";
String json="{\"code\":\"0000\",\"msg\":\" \",\"data\":{\"userid\":\"1\",\"userName\":\" \"}}";
JsonModel> j=new JsonModel>().toJsonModel(json);
System.out.println(j.getData());
}
호출할 때 간단하지 않습니까? 기본적인 해석은 여기까지 왔습니다. 사실 포장의 관건은 다음과 같은 몇 가지 특성을 활용한 getGeneric Superclass, Parameterized Type입니다.
GitHub에서 전체 코드를 올렸습니다. 다운로드 환영합니다.
https://github.com/wbsh583/gsonutl
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.