我正在尝试将JSONArray反序列化为List。为此,我尝试使用Gson,但我不明白为什么它不起作用,并且JSON的所有值都为null。

我该怎么办?

JSON

{ "result" : [
      { "Noticia" : {
            "created" : "2015-08-20 19:58:49",
            "descricao" : "tttttt",
            "id" : "19",
            "image" : null,
            "titulo" : "ddddd",
            "usuario" : "FERNANDO PAIVA"
          } },
      { "Noticia" : {
            "created" : "2015-08-20 19:59:57",
            "descricao" : "hhhhhhhh",
            "id" : "20",
            "image" : "logo.png",
            "titulo" : "TITULO DA NOTICIA",
            "usuario" : "FERNANDO PAIVA"
          } }
    ] }

反序列化
List<Noticia> lista = new ArrayList<Noticia>();
                            Gson gson = new Gson();
                            JSONArray array = obj.getJSONArray("result");

                            Type listType = new TypeToken<List<Noticia>>() {}.getType();
                            lista = gson.fromJson(array.toString(), listType);

                            //testing - size = 2 but value Titulo is null
                            Log.i("LISTSIZE->", lista.size() +"");
                            for(Noticia n:lista){
                                Log.i("TITULO", n.getTitulo());
                            }

类Noticia
public class Noticia implements Serializable {
    private static final long serialVersionUID = 1L;

    private Integer id;
    private String titulo;
    private String descricao;
    private String usuario;
    private Date created;
    private String image;

最佳答案

您的代码有两个问题:

  • 首先,您正在使用getJsonArray()来获取数组,
    这不是 Gson 库的一部分,您需要使用
    getAsJsonArray() 方法代替。
  • 第二个是您使用的array.toString()不太明显
    因为对于fromJson方法,您需要使用jsonArray作为
    参数而不是String,这将导致您解析问题,只需将其删除即可。

  • 并使用以下代码将jsonArray转换为List<Noticia>:
    Type type = new TypeToken<List<Noticia>>() {}.getType();
    List<Noticia> lista = gson.fromJson(array, type);
    

    您的整个代码将是:
    Gson gson = new Gson();
    JSONArray array = obj.getAsJsonArray("result");
    
    Type type = new TypeToken<List<Noticia>>() {}.getType();
    List<Noticia> lista = gson.fromJson(array, type);
    
    //testing - size = 2 but value Titulo is null
    Log.i("LISTSIZE->", lista.size() +"");
    for(Noticia n:lista){
       Log.i("TITULO", n.getTitulo());
    }
    

    关于java - 将JSONArray转换为List <Object>吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32133655/

    10-12 15:28