2015-08-21 3 views
8

Я пытаюсь десериализовать JSONArray для List. Для этого я пытаюсь использовать Gson, но я не понимаю, почему это не работает, и все значения JSON равны нулю.Преобразование JSONArray в список <Object>?

Как я мог это сделать?

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; 
+0

Тот факт, что вы выполняете array.toString(), выглядит для меня странным. Я бы подумал, возможно, итерации на JSONArray и преобразовать каждый элемент в объект Noticia? –

+0

Я не вижу метод getJSONArray в JsonObject (https://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/JsonObject.html). Пожалуйста, прочтите мой ответ. Надеюсь, это должно решить проблему. – Atul

ответ

1

Вы разобрать JSON, тха t выглядит как

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

Вам необходимо сделать еще один объект Item и разобрать их список.

public class Item{ 
    Noticia noticia; 
} 

Или вы можете interate через JSONArray, получить поле "noticia" от каждого объекта, то синтаксический анализ Noticia от данного JSONObject.

0

Я думаю, что проблема может быть связана с toString() на JSONArray. Но вы используете obj.get Как Метод JsonArray?

Попробуйте это:

JSONArray arr = obj.getAsJsonArray("result"); 

      Type listType = new TypeToken<List<Noticia>>() { 
      }.getType(); 
      return new Gson().fromJson(arr , listType); 
0

Есть две проблемы с вашим кодом:

  1. Во-первых, что вы используете getJsonArray(), чтобы получить массив, который не является частью Gson библиотека, вам необходимо использовать getAsJsonArray() метод вместо этого.
  2. Во-вторых, что вы используете 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()); 
} 
+0

Спасибо за внимание. Переменная 'obj' является' JSONObject' и не имеет 'getAsJsonArray'. Когда я пытаюсь 'obj.getAsJsonArray (« result »)' 'не работает, потому что не имеет этого метода. Как я могу это сделать? – FernandoPaiva

+0

@FernandoPaiva Итак, я думаю, что вы используете [org.json] (json.org/javadoc/org/json/JSONObject.html), поэтому вы просто используете 'obj.getJSONArray()' как в своем вопросе. –

1

Noticia.java

public class Noticia { 
    private String created; 
    private String descricao; 
    private String id; 
    private String image; 
    private String titulo; 
    private String usuario; 
    public String getCreated() { 
     return created; 
    } 
    public void setCreated(String created) { 
     this.created = created; 
    } 
    public String getDescricao() { 
     return descricao; 
    } 
    public void setDescricao(String descricao) { 
     this.descricao = descricao; 
    } 
    public String getId() { 
     return id; 
    } 
    public void setId(String id) { 
     this.id = id; 
    } 
    public String getImage() { 
     return image; 
    } 
    public void setImage(String image) { 
     this.image = image; 
    } 
    public String getTitulo() { 
     return titulo; 
    } 
    public void setTitulo(String titulo) { 
     this.titulo = titulo; 
    } 
    public String getUsuario() { 
     return usuario; 
    } 
    public void setUsuario(String usuario) { 
     this.usuario = usuario; 
    } 
    @Override 
    public String toString() { 
     return "Noticia [created=" + created + ", descricao=" + descricao 
       + ", id=" + id + ", image=" + image + ", titulo=" + titulo 
       + ", usuario=" + usuario + "]"; 
    } 
} 

Результат.Java

public class Result { 
    private Noticia Noticia; 

    public Noticia getNoticia() { 
     return Noticia; 
    } 

    public void setNoticia(Noticia noticia) { 
     Noticia = noticia; 
    } 

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

} 

Item.java

import java.util.List; 

public class Item { 
    private List<Result> result; 

    public List<Result> getResult() { 
     return result; 
    } 

    public void setResult(List<Result> result) { 
     this.result = result; 
    } 

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

Main.java

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

public class Main { 
    private static Gson gson; 

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

    public static void main(String[] args) { 
     String j = "{\"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\"}}]}"; 
     Item r = gson.fromJson(j, Item.class); 
     System.out.println(r); 
    } 
} 

Окончательный результат

Item [result=[Result [Noticia=Noticia [created=2015-08-20 19:58:49, descricao=tttttt, id=19, image=null, titulo=ddddd, usuario=FERNANDO PAIVA]], Result [Noticia=Noticia [created=2015-08-20 19:59:57, descricao=hhhhhhhh, id=20, image=logo.png, titulo=TITULO DA NOTICIA, usuario=FERNANDO PAIVA]]]] 
Смежные вопросы