2013-12-18 10 views
5

ho bisogno di leggere un dato JsonArray da un file (su una scheda SD) e conservarlo in un database SQLite.java.lang.ClassCastException: org.json.simple.JSONArray non può essere lanciato a org.json.JSONArray

ma ricevo un'eccezione java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.JSONArray durante l'analisi dei dati su JsonArray.

I dati nel file sono molto grandi, non è possibile archiviare tutti i dati in una singola stringa o buffer di stringa o generatore di stringhe.

Ecco il mio codice.

FileReader fileReader = new FileReader(file_path); 
Object obj = jsonParser.parse(fileReader); 
JSONArray jsonArray = (JSONArray) obj; // Exception. 

Si prega di aiutare ..

+0

Quali librerie utilizzate accanto ad Android standard? – gunar

+0

Sto usando json-lib-2.2.2-jdk15.jar e json-simple-1.1.1.jar. – user2085965

+0

Non dovresti provare ad usare solo uno di loro? – gunar

risposta

8

verifica l'avvenuta importazione nella parte superiore del file di origine.

Probabilmente avete una linea dicendo:

import org.json.JSONArray; 

che dovrebbe essere invece:

import org.json.simple.JSONArray; 

Se si sta lavorando in Eclipse, o qualsiasi altro IDE intelligente, il problema probabilmente è accaduto quando hai iniziato digitando la riga che inizia con JSONArray. A quel punto, l'IDE mostrerà diverse possibilità di importazione della classe JSONArray. Ne hai uno in org.json.JSONArray e uno in org.json.simple.JSONArray. Quest'ultimo è quello giusto, ma tu scegli il primo e il tuo IDE ha aggiunto automaticamente una riga di importazione nella parte superiore del tuo file java di origine.

Dall'eccezione il problema è abbastanza evidente, l'eccezione indica che il tuo oggetto obj non può essere trasmesso su un oggetto org.json.JSONArray in quanto è davvero un oggetto org.json.simple.JSONArray. (Nota che c'è un diverso tra i due).

Aggiornamento

Se si desidera utilizzare org.json.JSONArray, invece, è necessario utilizzare un'altra classe di jsonParser come questo è dal pacchetto org.json.simple. Attualmente stai mescolando le due librerie, e questo è ciò che causa i tuoi problemi.

+0

Grazie per la tua risposta .. ma org.json.JSONArray ha jsonParser functionlity.? Se rimuovo org.json.simple.JSONArray, jsonParser mi mostra un errore .. – user2085965

+0

@ user2085965: Se non si desidera eseguire manualmente l'analisi, è possibile utilizzare GSON e semplificare la vita. – Swayam

+0

@ user2085965: vedere la mia risposta aggiornata. È necessario rimuovere 'import org.json.JSONArray;' non 'importa org.json.simple.JSONArray; ' –

0

È possibile prima leggere l'intero contenuto del file in una stringa.

FileInputStream fileInputStream = null; 
String data=""; 
StringBuffer stringBuffer = new StringBuffer(""); 
try{ 
    fileInputStream=new FileInputStream(filename); 
    int i; 
    while((i=fileInputStream.read())!=-1) 
    { 
     stringBuffer.append((char)i); 
    } 
    data = stringBuffer.toString(); 
    csvFile.delete(); 
} 
catch(Exception e){ 
     LoggerUtil.printStackTrace(e); 
} 
finally{ 
    if(fileInputStream!=null){ 
     fileInputStream.close(); 
    } 
} 

Ora avremo l'intero contenuto in String (variabile di dati).

JSONParser parser = new JSONParser(); 
org.json.simple.JSONArray jsonArray= (org.json.simple.JSONArray) parser.parse(data); 

Successivamente è possibile utilizzare jsonArray come si desidera.

+0

Ottenere "Eccezione nel thread" principale "java.lang.ClassCastException: org.json.simple.JSONObject non può essere eseguito su org.json.simple.JSONArray " – mahi