Json parsing with Gson with data and arrays

試著忘記壹切 提交于 2019-12-20 07:40:32

问题


i am new to web services and i am using gson library for the first time . I am able to parse certain simple json string but i am stuck here . This is my response

{"message":"Action completed successfully.","results":3,"action":"param","data":[{"title":"test1","id":2,"completeCount":0},{"title":"test2","id":3,"completeCount":0},{"title":"test2","id":3,"completeCount":0}],"success":true}

This is how i am trying to parse it

Gson gson = new Gson();
Chracter character = gson.fromJson(successResponse, Character.class);

And this is my class

public class Character {


private  List<Detail> data = new ArrayList<Detail>();
private String action ;
private  int results;
private String message;
private Detail detail;


public Character() {

}

public Character(List<Detail> data, String action, int results,
        String message) {
    super();
    this.data = data;
    this.action = action;
    this.results = results;
    this.message = message;
}

public List<Detail> getData() {
    return data;
}

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

public String getAction() {
    return action;
}

public void setAction(String action) {
    this.action = action;
}

public int getResults() {
    return results;
}

public void setResults(int results) {
    this.results = results;
}

public String getMessage() {
    return message;
}

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


public Detail getDetail() {
    return detail;
}

public void setDetail(Detail detail) {
    this.detail = detail;
}

public class Detail{

    private String title;
    private int id;
    private int completeCount ;


    public Detail() {

    }

    public Detail(String title, int id, int completeCount) {
        super();
        this.title = title;
        this.id = id;
        this.completeCount = completeCount;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getId() {
        return Id;
    }

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

    public int getCompleteCount() {
        return completeCount;
    }

    public void setCompleteCount(int completeCount) {
        this.completeCount = completeCount;
    }




}





}

回答1:


Try following class for response.

public class Character {

    /**
     * Take array of class when you found "[","]" inside json response
     */
    ArrayList<Data> data;

    /**
     * take normal values as members
     */
    String action;
    int results;
    String message;
    boolean success;

    /**
     * When you will use array, don't forgot to implement empty contructor,
     * which initialize that array
     */
    public Character() {
        data = new ArrayList<Character.Data>();
    }

    /**
     * There will be only "get" methods, no setter method used in GSON bean
     * 
     * @return
     */
    public String getAction() {
        return action;
    }

    public String getMessage() {
        return message;
    }

    public int getResults() {
        return results;
    }

    public boolean getSuccess() {
        return success;
    }

    public ArrayList<Data> getData(){
            return data;
    }

    @Override
    public String toString() {
        String str = "Action : " + action + "\nMessage : " + message
                + "\nResults : " + results + "\nSuccess : " + success;
        str += "\n";
        for (Data d : data) {
            str += "\nTitle : " + d.getTitle();
            str += "\nComplete Count : " + d.getCompleteCount();
            str += "\nId : " + d.getId();
        }
        return str;
    }

    /**
     * as you have => "data":[...] => in your json response, you need to create
     * a class for that
     */
    public class Data {

        /**
         * take normal values as members
         */
        private String title;
        private int id;
        private int completeCount;

        public String getTitle() {
            return title;
        }

        public int getId() {
            return id;
        }

        public int getCompleteCount() {
            return completeCount;
        }
    }

}

Output

To print output, use following code. I have override toString() function.

Gson gson = new Gson();
Character character = gson.fromJson(strResponse, Character.class);
Log.d("Home", character.toString());

08-30 15:36:59.279: DEBUG/Home(10022): Action : param
08-30 15:36:59.279: DEBUG/Home(10022): Message : Action completed successfully.
08-30 15:36:59.279: DEBUG/Home(10022): Results : 3
08-30 15:36:59.279: DEBUG/Home(10022): Success : true
08-30 15:36:59.279: DEBUG/Home(10022): Title : test1
08-30 15:36:59.279: DEBUG/Home(10022): Complete Count : 0
08-30 15:36:59.279: DEBUG/Home(10022): Id : 2
08-30 15:36:59.279: DEBUG/Home(10022): Title : test2
08-30 15:36:59.279: DEBUG/Home(10022): Complete Count : 0
08-30 15:36:59.279: DEBUG/Home(10022): Id : 3
08-30 15:36:59.279: DEBUG/Home(10022): Title : test2
08-30 15:36:59.279: DEBUG/Home(10022): Complete Count : 0
08-30 15:36:59.279: DEBUG/Home(10022): Id : 3



来源:https://stackoverflow.com/questions/18529664/json-parsing-with-gson-with-data-and-arrays

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!