我正在尝试将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/