Gson 범용 패 키 징 해석 약정 형식 JSON 문자열
약속 형식 JSON 문자열
// data object
{"status":"1","message":" ","data":{}}
// data array
{"status":"0","message":" ","data":[]}
작업 중 에 이런 약정 형식 을 자주 만 날 수 있 습 니 다.어떻게 좋 은 패 키 징 을 쓰 면 data 가 대상 인지 배열 인지 자동 으로 식별 할 수 있 습 니까?
Gson 범 형 해석
gs on 은 일반적인 해석 을 지원 합 니 다.위의 형식 에서 대응 하 는 두 가지 방법 을 써 서 포장 할 생각 입 니 다.
// data
public static BaseJsonBean fromJson2Object() {}
// data
public static BaseJsonBean> fromJson2Array(){}
베이스 제 이 슨 빈
public class BaseJsonBean {
private String status;
private String message;
private T data;
private ArrayList dataList;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public ArrayList getDataList() {
return dataList;
}
public void setDataList(ArrayList dataList) {
this.dataList = dataList;
}
}
문제.
이렇게 하면 문제 가 있 습 니 다.매번 에 우 리 는 이 data 가 대상 인지 배열 인지 미리 알 아야 해당 하 는 방법 을 선택 하여 코드 로 스스로 판단 할 수 있 습 니까?물론 가능 합 니 다.Gson 사용자 정의 반 직렬 화 를 사용 합 니 다.
Gson 사용자 정의 역 직렬 화
GsonBuilder 등록 형식 어댑터 registerTypeAdapter()를 사용 하여 역 직렬 화
public BaseJsonBean deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
Gson gson = new Gson();
BaseJsonBean baseJsonBean = new BaseJsonBean();
JsonObject jsonObject = json.getAsJsonObject();
JsonElement jsonDataElement = jsonObject.get("data");
baseJsonBean.setStatus(jsonObject.get("status").getAsString());
baseJsonBean.setMessage(jsonObject.get("message").getAsString());
if (jsonDataElement.isJsonArray()) {
baseJsonBean.setData(null);
baseJsonBean.setDataList(fromJson2Array(gson, jsonDataElement, aClass));
} else {
baseJsonBean.setData(fromJson2Object(gson, jsonDataElement, aClass));
baseJsonBean.setDataList(null);
}
return baseJsonBean;
}
사용 예시
Gson gson = new GsonBuilder().registerTypeAdapter(BaseJsonBean.class,
new BaseJsonBeanDeserializer<>(DemoBean.class)).create();
BaseJsonBean baseJsonBean = gson.fromJson(json,
new TypeToken>() {}.getType());
//
baseJsonBean.getData();
//
baseJsonBean.getDataList();
마지막 으로 어떤 제 이 슨 데이터 형식 이 든 한 가지 로 해석 합 니 다.
원본 주소
프로젝트 에 사용 되 는 일반적인 생 성 라 이브 러 리 TypeBuilder
저 에 대한 건의 와 부족 함 을 환영 합 니 다.감사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.