我正在尝试将一个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());
}
船级社声明
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;
5条答案
按热度按时间smdncfj31#
您的程式码有两个问题:
1.首先,您使用
getJsonArray()
来获取数组,它不是Gson库的一部分,您需要使用**getAsJsonArray()**方法来代替。1.第二,您使用的是
array.toString()
,这并不明显,因为对于fromJson
方法,您需要jsonArray
作为参数,而不是String
,这将导致解析问题,只需删除它。并使用以下代码将
jsonArray
转换为List<Noticia>
:整个代码将是:
s4n0splo2#
通知.java
结果.java
项目.java
主要.java
最终结果
sy5wg1nm3#
解析json,看起来像
您需要创建另一个对象Item并解析它们的列表。
或者,您可以通过JSONArray进行交互,从每个JSONArray中获取字段“noticia”,然后从给定的JSONObject中解析Noticia对象。
a1o7rhls4#
我认为问题可能与JSONArray上的toString()有关。但是您使用的是obj.getAsJsonArray方法吗?
试试看:
hlswsv355#
Kotlin示例:
我们以JSONArry的形式获得响应
此处CitiesList CitiesList::class.java是城市对象的数组列表
使用GSON之前,在Gradle中添加依赖性