需要帮助创建类以使用GSON从json字符串映射到pojo

时间:2015-10-05 09:26:51

标签: java json gson deserialization

请帮我解决这个问题。我有以下JSON字符串,我应该解析为POJO:

{
"Status": "true",
"Result": {
    "rows": {
        "row": {
            "status": true,
            "subareas": [
                {
                    "nome": "Associacao Utente",
                    "id": 9,
                    "grafs": {
                        "rows": [
                            {
                                "id": 6,
                                "nome": "AssociacaoUtente",
                                "tipo": "PIE",
                                "serv": "MV_AS_UTENTE_POR_NEGOCIO",
                                "periodo": "ANO"
                            }
                        ]
                    }
                },
                {
                    "nome": "Chaves",
                    "id": 60,
                    "grafs": {
                        "rows": [
                            {
                                "id": 35,
                                "nome": "ChavesCriadosporano",
                                "tipo": "LINHA",
                                "serv": "MV_ASSOC_TOTAL_CHAVES",
                                "periodo": "ANO"
                            },
                            {
                                "id": 592,
                                "nome": "ChavesAssociadoAoUserPortal",
                                "tipo": "BAR",
                                "serv": "MV_ASSOC_USER_CHAVES",
                                "periodo": "TODOS"
                            },
                            {
                                "id": 593,
                                "nome": "ChavesAssociadoAoNegocios",
                                "tipo": "BAR",
                                "serv": "MV_ASSOC_CHAVES",
                                "periodo": "TODOS"
                            }
                        ]
                    }
                }
            ]
        }
    }
}

}

我将这些类反序列化为POJO,这是有效的,感谢Saurabh:

public class Example {
private String Status;
private Result Result;
public String getStatus() {
    return Status;
}
public void setStatus(String status) {
    Status = status;
}
public Result getResult() {
    return Result;
}
public void setResult(Result result) {
    Result = result;
}
@Override
public String toString() {
    return "Example [Status=" + Status + ", Result=" + Result + "]";
}

}


public class Result {
private Rows rows;

public Rows getRows() {
    return rows;
}

public void setRows(Rows rows) {
    this.rows = rows;
}

@Override
public String toString() {
    return "Result [rows=" + rows + "]";
}

}


public class Rows {
private Row row;

public Row getRow() {
    return row;
}
public void setRow(Row row) {
    this.row = row;
}
@Override
public String toString() {
    return "Rows [row=" + row + "]";
}
}


import java.util.ArrayList;
import java.util.List;

public class Row {
private Boolean status;
private List<Subarea> subareas = new ArrayList<Subarea>();
public Boolean getStatus() {
    return status;
}
public void setStatus(Boolean status) {
    this.status = status;
}
public List<Subarea> getSubareas() {
    return subareas;
}
public void setSubareas(List<Subarea> subareas) {
    this.subareas = subareas;
}
@Override
public String toString() {
    return "Row [status=" + status + ", subareas=" + subareas + "]";
}
}


public class Subarea {
private String nome;
private Integer id;
private Grafs grafs;
public String getNome() {
    return nome;
}
public void setNome(String nome) {
    this.nome = nome;
}
public Integer getId() {
    return id;
}
public void setId(Integer id) {
    this.id = id;
}
public Grafs getGrafs() {
    return grafs;
}
public void setGrafs(Grafs grafs) {
    this.grafs = grafs;
}
@Override
public String toString() {
    return "Subarea [nome=" + nome + ", id=" + id + ", grafs=" + grafs
            + "]";
}
}


import java.util.ArrayList;
import java.util.List;

public class Grafs {
private List<Row_> rows = new ArrayList<Row_>();

public List<Row_> getRows() {
    return rows;
}
public void setRows(List<Row_> rows) {
    this.rows = rows;
}
@Override
public String toString() {
    return "Grafs [rows=" + rows + "]";
}
}


public class Row_ {
private Integer id;
private String nome;
private String serv;
private String periodo;
public Integer getId() {
    return id;
}
public void setId(Integer id) {
    this.id = id;
}
public String getNome() {
    return nome;
}
public void setNome(String nome) {
    this.nome = nome;
}
public String getServ() {
    return serv;
}
public void setServ(String serv) {
    this.serv = serv;
}
public String getPeriodo() {
    return periodo;
}
public void setPeriodo(String periodo) {
    this.periodo = periodo;
}
@Override
public String toString() {
    return "Row_ [id=" + id + ", nome=" + nome + ", serv=" + serv
            + ", periodo=" + periodo + "]";
}
}

我需要帮助将从JSON收到的数据填充到Recyclerview,并按子区域划分。我对如何创建适配器感到困惑。请帮帮我。

1 个答案:

答案 0 :(得分:3)

首先,您的JSON应该具有Symmetry(请参阅“subareas”键下的“grafs”键) - 在第一个值中它是 -

"grafs" : {
    "rows" : {
        "row" : {

第二个值是 -

"grafs" : {
      "rows" : [

所以,我只是将它们改为 -

{
    "Status": "true",
    "Result": {
        "rows": {
            "row": {
                "status": true,
                "subareas": [
                    {
                        "nome": "Associacao Utente",
                        "id": 9,
                        "grafs": {
                            "rows": [
                                {
                                    "id": 6,
                                    "nome": "AssociacaoUtente",
                                    "tipo": "PIE",
                                    "serv": "MV_AS_UTENTE_POR_NEGOCIO",
                                    "periodo": "ANO"
                                }
                            ]
                        }
                    },
                    {
                        "nome": "Chaves",
                        "id": 60,
                        "grafs": {
                            "rows": [
                                {
                                    "id": 35,
                                    "nome": "ChavesCriadosporano",
                                    "tipo": "LINHA",
                                    "serv": "MV_ASSOC_TOTAL_CHAVES",
                                    "periodo": "ANO"
                                },
                                {
                                    "id": 592,
                                    "nome": "ChavesAssociadoAoUserPortal",
                                    "tipo": "BAR",
                                    "serv": "MV_ASSOC_USER_CHAVES",
                                    "periodo": "TODOS"
                                },
                                {
                                    "id": 593,
                                    "nome": "ChavesAssociadoAoNegocios",
                                    "tipo": "BAR",
                                    "serv": "MV_ASSOC_CHAVES",
                                    "periodo": "TODOS"
                                }
                            ]
                        }
                    }
                ]
            }
        }
    }
}

现在您可以创建类 -

<强> Example.java

public class Example {
    private String Status;
    private Result Result;
    public String getStatus() {
        return Status;
    }
    public void setStatus(String status) {
        Status = status;
    }
    public Result getResult() {
        return Result;
    }
    public void setResult(Result result) {
        Result = result;
    }
    @Override
    public String toString() {
        return "Example [Status=" + Status + ", Result=" + Result + "]";
    }

}

<强> Result.java

public class Result {
    private Rows rows;

    public Rows getRows() {
        return rows;
    }

    public void setRows(Rows rows) {
        this.rows = rows;
    }

    @Override
    public String toString() {
        return "Result [rows=" + rows + "]";
    }

}

<强> Rows.java

public class Rows {
    private Row row;

    public Row getRow() {
        return row;
    }
    public void setRow(Row row) {
        this.row = row;
    }
    @Override
    public String toString() {
        return "Rows [row=" + row + "]";
    }
}

<强> Row.java

import java.util.ArrayList;
import java.util.List;

public class Row {
    private Boolean status;
    private List<Subarea> subareas = new ArrayList<Subarea>();
    public Boolean getStatus() {
        return status;
    }
    public void setStatus(Boolean status) {
        this.status = status;
    }
    public List<Subarea> getSubareas() {
        return subareas;
    }
    public void setSubareas(List<Subarea> subareas) {
        this.subareas = subareas;
    }
    @Override
    public String toString() {
        return "Row [status=" + status + ", subareas=" + subareas + "]";
    }
}

<强> Subarea.java

public class Subarea {
    private String nome;
    private Integer id;
    private Grafs grafs;
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Grafs getGrafs() {
        return grafs;
    }
    public void setGrafs(Grafs grafs) {
        this.grafs = grafs;
    }
    @Override
    public String toString() {
        return "Subarea [nome=" + nome + ", id=" + id + ", grafs=" + grafs
                + "]";
    }
}

<强> Grafs.java

import java.util.ArrayList;
import java.util.List;

public class Grafs {
    private List<Row_> rows = new ArrayList<Row_>();

    public List<Row_> getRows() {
        return rows;
    }
    public void setRows(List<Row_> rows) {
        this.rows = rows;
    }
    @Override
    public String toString() {
        return "Grafs [rows=" + rows + "]";
    }
}

<强> Row_.java

public class Row_ {
    private Integer id;
    private String nome;
    private String serv;
    private String periodo;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getServ() {
        return serv;
    }
    public void setServ(String serv) {
        this.serv = serv;
    }
    public String getPeriodo() {
        return periodo;
    }
    public void setPeriodo(String periodo) {
        this.periodo = periodo;
    }
    @Override
    public String toString() {
        return "Row_ [id=" + id + ", nome=" + nome + ", serv=" + serv
                + ", periodo=" + periodo + "]";
    }
}

现在,您可以按以下方式测试 -

<强> Main.java

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.testgson.beans.Example;

public class Main {
    private static Gson gson;

    static {
        gson = new GsonBuilder().create();
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
         String j = "{\"Status\":\"true\",\"Result\":{\"rows\":{\"row\":{\"status\":true,\"subareas\":[{\"nome\":\"Associacao Utente\",\"id\":9,\"grafs\":{\"rows\":[{\"id\":6,\"nome\":\"AssociacaoUtente\",\"tipo\":\"PIE\",\"serv\":\"MV_AS_UTENTE_POR_NEGOCIO\",\"periodo\":\"ANO\"}]}},{\"nome\":\"Chaves\",\"id\":60,\"grafs\":{\"rows\":[{\"id\":35,\"nome\":\"ChavesCriadosporano\",\"tipo\":\"LINHA\",\"serv\":\"MV_ASSOC_TOTAL_CHAVES\",\"periodo\":\"ANO\"},{\"id\":592,\"nome\":\"ChavesAssociadoAoUserPortal\",\"tipo\":\"BAR\",\"serv\":\"MV_ASSOC_USER_CHAVES\",\"periodo\":\"TODOS\"},{\"id\":593,\"nome\":\"ChavesAssociadoAoNegocios\",\"tipo\":\"BAR\",\"serv\":\"MV_ASSOC_CHAVES\",\"periodo\":\"TODOS\"}]}}]}}}}";
         Example r = gson.fromJson(j, Example.class);
         System.out.println(r);
    }
}

结果是 -

Example [Status=true, Result=Result [rows=Rows [row=Row [status=true, subareas=[Subarea [nome=Associacao Utente, id=9, grafs=Grafs [rows=[Row_ [id=6, nome=AssociacaoUtente, serv=MV_AS_UTENTE_POR_NEGOCIO, periodo=ANO]]]], Subarea [nome=Chaves, id=60, grafs=Grafs [rows=[Row_ [id=35, nome=ChavesCriadosporano, serv=MV_ASSOC_TOTAL_CHAVES, periodo=ANO], Row_ [id=592, nome=ChavesAssociadoAoUserPortal, serv=MV_ASSOC_USER_CHAVES, periodo=TODOS], Row_ [id=593, nome=ChavesAssociadoAoNegocios, serv=MV_ASSOC_CHAVES, periodo=TODOS]]]]]]]]]