2015-08-21 12 views
8

Sto tentando di deserializzare un JSONArray in List. Per farlo sto provando ad usare Gson ma non riesco a capire perché non funzioni e tutti i valori di JSON sono nulli.Conversione di JSONArray in elenco <Object>?

Come posso fare questo?

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" 
      } } 
    ] } 

deserializza

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()); 
          } 

Classe 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

Il fatto che si esegua array.toString() mi sembra strano. Considererei forse iterare su JSONArray e trasformare ogni elemento in oggetto Noticia? –

+0

Non vedo il metodo getJSONArray su JsonObject (https://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/JsonObject.html) Si prega di leggere la mia risposta. Spero che dovrebbe risolvere il problema. – Atul

risposta

1

si analizza JSON, tha t assomiglia a

{ "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" 
     } 
] } 

È necessario creare un altro oggetto e analizzare un elenco di essi.

public class Item{ 
    Noticia noticia; 
} 

Oppure si può interate attraverso JSONArray, ottenere campo "noticia" da ogni oggetto Noticia quindi analizzare dalla data JSONObject.

0

Penso che il problema potrebbe essere qualcosa a che fare con toString() su JSONArray. Ma stai usando obj.get Come metodo JsonArray?

Prova questo:

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

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

Ci sono due problemi con il tuo codice:

  1. prima è che si sta utilizzando un getJsonArray() per ottenere la matrice, che non fa parte della GSON Libreria, è necessario utilizzare il metodo getAsJsonArray().
  2. La seconda è che si sta utilizzando array.toString() che non è ovvio perché per il metodo fromJson avete bisogno di un jsonArray come parametro e non String e che causerà si analizza problemi, basta rimuoverlo.

E utilizzare il seguente codice per convertire il vostro jsonArray-List<Noticia>:

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

E tutto il tuo codice sarà:

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

Grazie per l'attenzione. La variabile 'obj' è un' JSONObject' e non ha 'getAsJsonArray'. Quando provo 'obj.getAsJsonArray (" result) "' non funziona perché non abbiamo questo metodo. Come potrei farlo? – FernandoPaiva

+0

@FernandoPaiva Quindi penso che tu stia usando [org.json] (json.org/javadoc/org/json/JSONObject.html) in modo da utilizzare semplicemente 'obj.getJSONArray()' come nella tua domanda. –

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 + "]"; 
    } 
} 

Risultato.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); 
    } 
} 

risultato finale

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]]]] 
Problemi correlati