0

我正在使用 Gson 使用自定义模型解析一个巨大的 Json 回复。我的问题是 Json 回复没有直接从我拥有的模型开始。特别是在 Json 回复的“_data”部分。

MyRequester {
@SerializedName("REQUEST")
private String request;

@SerializedName("RESPONSE")
private Response response;

public String getRequest() {
    return this.request;
}

public void setRequest(String request) {
    this.request = request;
}

public Response getResponse() {
    return this.response;
}

public void setResponse(Response response) {
    this.response = response;
}

public static class Response {
    @SerializedName("_status")
    private int status;

    @SerializedName("_msg")
    private String message;

    @SerializedName("_data")
    private List<InfoModel> data;

    public int getStatus() {
        return this.status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getMessage() {
        return this.message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public List<InfoModel> getData() {
        return this.data;
    }

    public void setData(List<InfoModel> data) {
        this.data = data;
    }
}
}

InfoModel {
    @SerializedName("id")
    private String id;

@SerializedName("info")
    private MyCustomModel info;

public String getId() {
    return this.id;
}

public void setId(String id) {
    this.id = id;
}

public MyCustomModel getInfo() {
    return this.info;
}

public void setInfo(MyCustomModel info) {
    this.info = info;
}
}


MyCustomModel {
    @SerializedName("no")
    private String no;

    @SerializedName("assigned_user_id")
    private String assigned_user_id;

}

以下代码中使用了上述模型:

public List<InfoModel> readRPSJsonStream(InputStream in)
        throws IOException {
    Gson gson = new Gson();
    JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
    List<InfoModel> listRPS = new ArrayList<InfoModel>();

    reader.beginObject();
    reader.nextName();
    reader.nextString();
    reader.nextName();
    reader.beginObject();
    reader.nextName();
    reader.nextString();
    reader.nextName();
    reader.nextString();
    reader.nextName();
    reader.beginArray();

    while (reader.hasNext()) {
        InfoModel rps = gson.fromJson(reader, InfoModel .class);
        listRPS.add(rps);
    }
    reader.endArray();
    reader.close();
    return listRPS;
}

我想用更有效的方式替换这些行来直接获取“_data”部分。

reader.beginObject();
    reader.nextName();
    reader.nextString();
    reader.nextName();
    reader.beginObject();
    reader.nextName();
    reader.nextString();
    reader.nextName();
    reader.nextString();
    reader.nextName();
    reader.beginArray();

我想使用 MyRequester 类,但我不知道如何在 StreamReader 中使用它。我曾经使用以下代码对此有不同的方法:

Gson gson = new Gson();
    MyRequester myRequester = null;

String URL = "ws/test.php";
    HttpPost httpPost = new HttpPost(URL);

HttpResponse response = UnilabSfaApp.httpClient.execute(httpPost);
        HttpEntity entity = response.getEntity();
        String entityString = EntityUtils.toString(entity);
        myRequester = gson.fromJson(entityString,
                    MyRequester.class);
List<InfoModel> listInfo = myRequester.getResponse().getData();

但这不适用于我目前的方法。

Json 回复格式为:

{"REQUEST":"Retrieve Multiple Record Details",
  "RESPONSE":
     {"_status":1,"_msg":"SUCCESS: 2 Record(s) found.","_data":
     [{"id":"43x7638",
       "info":
          {
          "no":"RPS739",
          "assigned_user_id":"19x1",
          }
      },

      {"id":"43x7654",
          "info":
          {
          "no":"RPS755",
          "assigned_user_id":"19x1",
          }
      }
    ]
    }
}
4

1 回答 1

0

我不确定我是否正确理解了您的问题......但是,您为什么不直接使用您的课程MyRequester来反序列化响应?像这样:

JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
MyRequester myRequester = gson.fromJson(reader, MyRequester.class);
于 2013-07-02T14:51:45.823 回答