1

httpresponse から次の json を取得します

{
"result": "success",
"team_registration": {
    "current_status": "executed",
    "expiration_time": "2012-07-18T21:29:43Z",
    "id": 609,
    "team_id": 50,
    }
}

「結果」を文字列として取得し、「team_registration」を POJO (Android の場合) としてジャクソンで取得するにはどうすればよいですか?

現在、私はこれを持っています:

HttpResponse response = httpClient.execute(httpGet);
        if (response.getStatusLine().getStatusCode() == 200) {
            HttpEntity entity = response.getEntity();

            String json = EntityUtils.toString(entity);

            Map<String, Object> map = mapper.readValue(json, new TypeReference<Map<String, Object>>() {
            });

            result = (String) map.get("result");
            resultRegistration = (Registration) map.get("team_registration");

登録クラス:

package be.radarwerk.app.model;

import java.io.Serializable;
import java.util.Date;

import org.codehaus.jackson.annotate.JsonIgnore;

public class Registration implements Serializable { // Todo implements parceable?
private static final long serialVersionUID = 1L;

private int id;
private String currentStatus;
private Date expirationTime;

@JsonIgnore
private Volunteer volunteer;
@JsonIgnore
private Team team;

public Registration() {

}

public Registration(int id, String currentStatus, Volunteer volunteer,
        Team team) {
    super();
    this.id = id;
    this.currentStatus = currentStatus;
    this.volunteer = volunteer;
    this.team = team;
}

public int getId() {
    return id;
}

public String getCurrentStatus() {
    return currentStatus;
}

public Volunteer getVolunteer() {
    return volunteer;
}

public Team getTeam() {
    return team;
}

public Date getExpirationTime() {
    return expirationTime;
    }


}

「結果」は文字列として正常に機能しますが、「registration_moment」では次の例外が発生します: java.lang.ClassCastException: java.util.LinkedHashMap を登録にキャストできません

また、「結果」と同じ方法で文字列にキャストし、その文字列に対して mapper.readValue を実行してみました。失敗。

任意のヒント?

4

2 に答える 2

1

あなたのアプローチは私には少し奇妙に思えます。Android JSONObjectクラスを実際に使用する必要があります。それがその目的です。JSONObject (または JSONArray) を取得したら、要素を別のデータ構造に移動したい場合はそれを反復処理する必要がありますが、それはおそらく不要です。

いずれにせよ、JSONObject に到達するための( android-queryを使用した) コードは次のとおりです。

String url = "whatever you want";
aq.ajax(url, JSONArray.class, new AjaxCallback<JSONArray>() {
    @Override
    public void callback(String url, JSONArray json, AjaxStatus status) {
        if (json == null) {
            Toast.makeText(context, "Failed to retrieve JSON", Toast.LENGTH_SHORT);
        }
        else {
            try {
                JSONObject general = json.getJSONObject(0);
                ...
            }
        }
    }
});
于 2013-06-21T21:54:12.407 に答える