Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

JSONDecodeError

Neo (6720 points)
7 27 37
in Programmare in Python by (6.7k points)
closed by

Buonasera!

Stavo svolgendo gli esercizi della prova di recupero del 16-1-18 e nello svolgere il quinto esercizio (Relativo all'uso di file JSON) mi son subito trovato ad affrontare questo errore: "JSONDecodeError".

Provando anche solo l'apertura del file e l'assegnamento a variabile come di seguito l'errore persiste: with open(fname, encoding = 'utf-8') as a:

                                                                                                                                                                     file = json.load(a)

                                                                                                                                                                     print(file)

Ho provato dunque a eliminare la seconda riga di codice ("file = json.load(a)") e l'errore sparisce. A questo punto printando "a" e non più "file", ovviamente, non ottengo il contenuto del file JSON. La mia domanda è dunque questa, cosa sto sbagliando? L'apertura e il caricamento di un file JSON non segue questa procedura? Oltre a questo errore, Spyder mi fornisce questa informazione: "Expecting value: line 1 column 1 (char 0)". Forse c'è un errore all'interno del file? Grazie in anticipo per l'attenzione e per l'aiuto! :D

EDIT: L'errore era causato dal file JSON corrotto!

1.8k views
closed with the note: always check your downloads

4 Answers

Best answer
r
rosario.salerno (3010 points)
15 30 44
by (3.0k points)
selected by
Ciao, io ho utilizzato il tuo stesso metodo load() (senza la codifica però, solo open(filename)) e funziona. Magari puoi provare così?
Neo (6720 points)
7 27 37
by (6.7k points)
Appena provato, l'errore persiste! Ma tu hai appena scaricato la cartella dal link fornito quì sul forum? Se sì puoi aprire il file JSON con il blocco note su windows o se sei in ambiente linux con un editor di testo e dirmi se effettivamente il file è vuoto?
r
rosario.salerno (3010 points)
15 30 44
by (3.0k points)
Scusami, erroneamente ho pensato che ti riferissi alla prova di recupero di novembre che utilizzava pure il json, non pensavo fossero già usciti gli esercizi del 16. Ti  confermo però che provando a scaricare mi da un'archivio corrotto, non è la prima volta che mi succede, il link era "difettoso" anche con l'homework 2. La connessione non può essere il problema visto che ho la fibra. Sicuramente il tuo problema(e anche mio da adesso :D) è il link, è possibile averne uno nuovo?
r
rosario.salerno (3010 points)
15 30 44
by (3.0k points)
Risolto scaricando l'archivio dalla modalità incognito di chrome. Ti confermo che i file json aperti con un editor di testo non sono vuoti.
Neo (6720 points)
7 27 37
by (6.7k points)
Ooooh menomale! Grazie mille ancora della verifica, riprovo a scaricare e ti dico!! :D
Neo (6720 points)
7 27 37
by (6.7k points)
Era proprio il file ad essere corrotto, come avevo immaginato! Grazie mille Rosario
r
rosario.salerno (3010 points)
15 30 44
by (3.0k points)
Di nulla, figurati!
GeraldCaba (2920 points)
6 20 28
by (2.9k points)
edited by
per spostare il contenuto del file di testo all'interno di una variabile invece di usare load potresti usare il comando read() in questo modo:

 with open(fnamee) as a:

    file=a.read()

successivamente convertirlo in dizionario:

dict=eval(file)
giorgio.belli (10140 points)
23 74 98
by (10.1k points)
questo vale per file testuali, ma credo che Neo stia cercando di caricare da un file JSON una struttura serializzata (non so se sia il termine corretto)
Neo (6720 points)
7 27 37
by (6.7k points)
Se intendi struttura a dizionario, si
Neo (6720 points)
7 27 37
by (6.7k points)
Ho provato anche ciò che mi hai consigliato tu e sebbene l'errore non viene più fuori il print non mi stampa niente >.<
GeraldCaba (2920 points)
6 20 28
by (2.9k points)
strano io ho fatto esattamente cosi ma funziona
Neo (6720 points)
7 27 37
by (6.7k points)
Rieccomi.. non avevo letto la parte finale scusami! Ho convertito in dizionario usando eval (?) e mi da errore( error -> SyntaxError. Unexpected EOF while parsing (<string>, line 0) ), ho usato dict(a) printato il dizionario ed effettivamente è vuoto! Così come visualizzavo il file JSON una volta che lo andavo ad aprire normalmente... Penso ci sia un errore a questo punto nei file forniti...
giorgio.belli (10140 points)
23 74 98
by (10.1k points)
Ciao, stando soltanto alle informazioni che hai scritto non è molto semplice capire il problema, comunque per prima cosa ti consiglierei di assicurarti che il file .json che stai cercando di aprire sia corretto e per fare cio potresti con il dump salvartici una qualsiasi struttura.

Inoltre su internet sto leggendo che potrebbe essere dipeso dalla codifica del file, prova ad eliminare l'encoding dai parametri, altrimentri come fanno in questo thread, prova ad importare il decoder di json.

https://stackoverflow.com/questions/8381193/python-handle-json-decode-error-when-nothing-returned

Spero tu risolva (rofl)
Neo (6720 points)
7 27 37
by (6.7k points)
Allora la codifica del file senza specificare " encoding = 'utf-8' " è " cp1252 ". L'errore continua però ad esistere! Che il file sia corretto (credo tu intenda il nome) ne son certo, ho stampato la stringa che viene fornita alla funzione e ho trovato il rispettivo file nella cartella! Ho solo un dubbio, aprendo questo file risulta vuoto aprendo invece i risultati che dovrei dare in output (sempre file JSON) contengono delle strutture dizionario, così come deve essere
giorgio.belli (10140 points)
23 74 98
by (10.1k points)
Scusami mi sono espresso male, per file corretto intendevo dire che contiene delle strutture dati salvate correttamente e non sia corrotto o cose simili. Comunque prova con il decoder del thread di stackoverflow perche di sicuro è un problema di codifica.
Neo (6720 points)
7 27 37
by (6.7k points)
Ho provato e non riesco a catturare l'eccezione, starò sbagliando io nel settare il try except D: Grazie comunque, ora vedo di capire!
split (8700 points)
21 59 79
by (8.7k points)
ma a tua variabile si chiama davvero "file"? non è una parola proibita? :/
Neo (6720 points)
7 27 37
by (6.7k points)
Yep non da problemi
split (8700 points)
21 59 79
by (8.7k points)
ah figo, non lo sapevo