그래서 서버의 응답을 구문 분석하고 싶습니다. 목표는 응답을 수신하고이를 직렬화하는 것보다 객체를 구축 할 통합 시스템을 구축하는 것입니다. 두 개 이상의 키 값 항목 객체들의 배열되는 상품;json objcts의 직렬화 및 비 직렬화
타입 1 :
서버로부터 응답의 4 개 가지 유형
{
"response": {
"count": 1,
"items": [
{
"id": 456239048,
"key1": "value_1",
"key2": "value_2"
}
]
}
}
2 형 : 항목은 또한 예를 들어 도시로 불리는 또 다른 내부 객체를 가질 수 있습니다;
{
"response": {
"count": 923,
"items": [
{
"id": 1,
"first_name": "Test",
"last_name": "Test",
"city": {
"id": 2,
"title": "city1"
}
},
{
"id": 2,
"first_name": "Test2",
"last_name": "Test2"
}
]
}
}
응답의 마지막 마지막 두 가지 유형
:
{
"error": {
"error_code": 14
}
}
{
"response": [
{
"id": 1
}
]
}
그리고 두 번째는 그들은 등등 서버의 조건의 반응이다.
그래서 목표를 달성하기 위해 여러 클래스를 구현했습니다. 그리고 더 많은 시간 : - 직렬화와 역 직렬화 (json1 => object => json2; json1 = json2); - 개체 메서드 및 값에 대한 액세스.
public class DataModelDeserializer<T> implements JsonDeserializer<T> {
@Override
public T deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
JsonElement items=null;
try{
items = jsonElement.getAsJsonObject();
}catch (Exception e){
e.printStackTrace();
}
return new Gson().fromJson(items, type);
}
}
DataModel.java
public class DataModel {
private Response response;
public Response getResponse() {
return response;
}
public void setResponse(Response response) {
this.response = response;
}
}
Response.java
public class Response<T> {
private int count;
private List<T> items=new ArrayList<T>();
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public List<T> getItems() {
return items;
}
public void setItems(List<T> items) {
this.items = items;
}
}
Items.java
public class Items {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
그리고 좋은 소식으로 시작 -이 방법은 달성하기 위해 나에게 도움이 첫 번째 목표 - covert json to ob ject and back. Hovewer Items 객체의 값에 액세스 할 수 없습니다. 오류가 발생합니다 :
Exception in thread "main" java.lang.ClassCastException: com.google.gson.internal.StringMap cannot be cast to com.app.Items
그래, 난이 응답의 유형을 확인하는 방법에 문제에 직면하기 때문에이 방법은 정말 좋은 아니라고 생각합니다.
감사합니다.
문제는 응답 형식을 편집 할 수 없다는 것입니다. 내가 가지고있는 유일한 아이디어는 type이라는 json 속성에 추가하여 작업하는 것입니다.하지만 그저 조용한 해킹입니다 ... – Ascelhem
어떻게 응답 형식을 편집 할 수 있지만 여전히 json 속성을 추가 할 수 있습니까? –