Autore Topic: Problemi con il JSON  (Letto 881 volte)

Offline bakiko

  • Utente junior
  • **
  • Post: 74
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC One
  • Sistema operativo:
    Windows 7
Problemi con il JSON
« il: 06 Febbraio 2014, 10:15:36 CET »
0
Salve a tutti ragazzi. Ho un piccolo problema con l'utilizzo del JSON.
Dopo aver interrogato un web-Server, ottengo codesti dati JSON che vengo memorizzati in una stringa "result":
Codice (Java): [Seleziona]
{"0":{"id":"11","titolo":"Mobile","comune":"Milano","costo":"260"},"1":{"id":"28","titolo":"Tavolo","comune":"Milano","costo":"50"},"2":{"id":"36","titolo":"Armadio","comune":"Genova","costo":"255"},"3":{"id":"3","titolo":"Servizio piatti","comune":"Milano","costo":"90"}}

Ho cercato di gestirli in questo modo:
Codice (Java): [Seleziona]
JSONArray json=new JSONArray(result);
                            for(int i=0;i<json.length();i++){
                                        String current=json.getString(i);
                                    JSONObject json_data = json.getJSONObject(i);
                                    Dati datiNew=new Dati(json_data.getString("id"),json_data.getString("titolo"),json_data.getString("comune"),json_data.getString("costo"),);
                                    lista.add(datiNew);
                            }

ma appena arriva alla definizione di JSONArray  mi lancia l'eccezione.Ecco quello che viene mostrato nel LogCat
Codice (Java): [Seleziona]
02-06 10:10:49.155: W/System.err(17455): org.json.JSONException: Value 3":{"id":"3","titolo":"Servizio piatti","comune":"Milano","costo":"90"},"2":{"id":"36","titolo":"Armadio","comune":"Genova","costo":"255"},"1":{"id":"28","titolo":"Tavolo","comune":"Milano","costo":"50"},{"0":{"id":"11","titolo":"Mobile","comune":"Milano","costo":"260"}} of type org.json.JSONObject cannot be converted to JSONArray
02-06 10:10:49.165: W/System.err(17455):        at org.json.JSON.typeMismatch(JSON.java:111)
02-06 10:10:49.165: W/System.err(17455):        at org.json.JSONArray.<init>(JSONArray.java:96)
02-06 10:10:49.175: W/System.err(17455):        at org.json.JSONArray.<init>(JSONArray.java:108)
02-06 10:10:49.175: W/System.err(17455):        at com.programmingAntonio.prova.object$AsyncTaskLista.doInBackground(ListaOggetti.java:156)
02-06 10:10:49.175: W/System.err(17455):        at com.programmingAntonio.prova.ListaOggetti$AsyncTaskLista.doInBackground(ListaOggetti.java:1)
02-06 10:10:49.185: W/System.err(17455):        at android.os.AsyncTask$2.call(AsyncTask.java)
02-06 10:10:49.185: W/System.err(17455):        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
02-06 10:10:49.195: W/System.err(17455):        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java)
02-06 10:10:49.195: W/System.err(17455):        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
02-06 10:10:49.195: W/System.err(17455):        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
02-06 10:10:49.205: W/System.err(17455):        at java.lang.Thread.run(Thread.java:864)
Sicuramente sbaglio qualcosa nel definire il JSONArray.
Grazie a tutti per l'aiuto

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problemi con il JSON
« Risposta #1 il: 06 Febbraio 2014, 10:21:35 CET »
+1
Il problema è che quello non è un JSONArray, ma un JSONObject.

In JSON ci sono DUE tipi di oggetti: array e object. Gli array sono quelli contenuti dentro parentesi quadre e non hanno il riferimento associativo (non hanno "0": xxxx), mentre gli object sono contenuti dentro parentesi graffe ed hanno il riferimento associativo.

La tua stringa sarebbe stata un JSONArray se fatta così:
Codice: [Seleziona]
[{"id":"11","titolo":"Mobile","comune":"Milano","costo":"260"},{"id":"28","titolo":"Tavolo","comune":"Milano","costo":"50"},{"id":"36","titolo":"Armadio","comune":"Genova","costo":"255"},{"id":"3","titolo":"Servizio piatti","comune":"Milano","costo":"90"}]
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline bakiko

  • Utente junior
  • **
  • Post: 74
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC One
  • Sistema operativo:
    Windows 7
Re:Problemi con il JSON
« Risposta #2 il: 06 Febbraio 2014, 10:44:30 CET »
0
Il problema è che quello non è un JSONArray, ma un JSONObject.

In JSON ci sono DUE tipi di oggetti: array e object. Gli array sono quelli contenuti dentro parentesi quadre e non hanno il riferimento associativo (non hanno "0": xxxx), mentre gli object sono contenuti dentro parentesi graffe ed hanno il riferimento associativo.

La tua stringa sarebbe stata un JSONArray se fatta così:
Codice: [Seleziona]
[{"id":"11","titolo":"Mobile","comune":"Milano","costo":"260"},{"id":"28","titolo":"Tavolo","comune":"Milano","costo":"50"},{"id":"36","titolo":"Armadio","comune":"Genova","costo":"255"},{"id":"3","titolo":"Servizio piatti","comune":"Milano","costo":"90"}]

Perfetto bradipao adesso ho capito. Io fino ad oggi avevo sempre utilizzato il JSONArray (i dati infatti erano tutti fatti in questo modo [{...).
Adesso ho provato a modificare il codice i questo modo:
Codice (Java): [Seleziona]
JSONObject json=new JSONOnject(result);
                            for(int i=0;i<json.length();i++){
                                       String current=json.getString(i+"");
                                    JSONObject json_data = json.getJSONObject(current);
                                    Dati datiNew=new Dati(json_data.getString("id"),json_data.getString("titolo"),json_data.getString("comune"),json_data.getString("costo"),);
                                    lista.add(datiNew);
                            }
Ma viene lanciata l'eccezione al momento di definire il "json_data". Da premettere che adesso current contiene diciamo la mia prima riga
Codice (Java): [Seleziona]
{"id":"11","titolo":"Mobile","comune":"Milano","costo":"260"}

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problemi con il JSON
« Risposta #3 il: 06 Febbraio 2014, 11:27:32 CET »
+1
No, i JSONObject non funzionano così.

Una volta che hai un JSONObject non ripassi più dalla stringhe, lavori con JSONArray o altri JSONObject.

Codice (Java): [Seleziona]
JSONObject json_data = json.getJSONObject("0");
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline bakiko

  • Utente junior
  • **
  • Post: 74
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC One
  • Sistema operativo:
    Windows 7
Re:Problemi con il JSON
« Risposta #4 il: 06 Febbraio 2014, 13:46:48 CET »
0
No, i JSONObject non funzionano così.

Una volta che hai un JSONObject non ripassi più dalla stringhe, lavori con JSONArray o altri JSONObject.

Codice (Java): [Seleziona]
JSONObject json_data = json.getJSONObject("0");

Adesso ho capito tutto grazie mille per le delucidazioni.
Ho modificato il tutto in questo modo (lascio sotto il codice funzionante), e funge ;):
Codice (Java): [Seleziona]
JSONObject json=new JSONOnject(result);
                            for(int i=0;i<json.length();i++){
                                       String current=json.getString(i+"");
                                    JSONObject json_data = json.getJSONObject(i+"");
                                    Dati datiNew=new Dati(json_data.getString("id"),json_data.getString("titolo"),json_data.getString("comune"),json_data.getString("costo"),);
                                    lista.add(datiNew);
                            }

Grazie mille ;)