2016-07-28 5 views
1

Ich verwende Python 3.5.2 unter Windows 10 x64. Die JSON Datei, die ich lese, ist this, die ein JSON Array ist, das 2 weitere Arrays enthält.JSON-Datei mit Python 3 lesen

Ich versuche, diese JSON Datei mit dem json Modul zu analysieren. Wie in der docs beschrieben, muss die JSON Datei konform zu RFC 7159 sein. Ich habe meine Datei here und es sagt mir, es ist völlig in Ordnung, mit dem RFC 7159-Format, aber wenn man versucht, es mit diesem einfachen Python-Code zu lesen:

with open(absolute_json_file_path, encoding='utf-8-sig') as json_file: 
    text = json_file.read() 
    json_data = json.load(json_file) 
    print(json_data) 

Ich erhalte diese Ausnahme:

Traceback (most recent call last): 
    File "C:\Program Files (x86)\JetBrains\PyCharm 4.0.5\helpers\pydev\pydevd.py", line 2217, in <module> 
    globals = debugger.run(setup['file'], None, None) 
    File "C:\Program Files (x86)\JetBrains\PyCharm 4.0.5\helpers\pydev\pydevd.py", line 1643, in run 
    pydev_imports.execfile(file, globals, locals) # execute the script 
    File "C:\Program Files (x86)\JetBrains\PyCharm 4.0.5\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile 
    exec(compile(contents+"\n", file, 'exec'), glob, loc) 
    File "C:/Users/Andres Torti/Git-Repos/MCF/Sur3D.App/shapes-json-checker.py", line 14, in <module> 
    json_data = json.load(json_file) 
    File "C:\Users\Andres Torti\AppData\Local\Programs\Python\Python35-32\lib\json\__init__.py", line 268, in load 
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw) 
    File "C:\Users\Andres Torti\AppData\Local\Programs\Python\Python35-32\lib\json\__init__.py", line 319, in loads 
    return _default_decoder.decode(s) 
    File "C:\Users\Andres Torti\AppData\Local\Programs\Python\Python35-32\lib\json\decoder.py", line 339, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "C:\Users\Andres Torti\AppData\Local\Programs\Python\Python35-32\lib\json\decoder.py", line 357, in raw_decode 
    raise JSONDecodeError("Expecting value", s, err.value) from None 
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 

Ich kann diese genaue Datei in Javascript perfekt lesen, aber ich kann Python nicht dazu bringen, sie zu analysieren. Ist irgendetwas mit meiner Datei falsch oder gibt es ein Problem mit dem Python-Parser?

+0

Etwas stimmt nicht mit der Codierung der Datei. Für das, was es wert ist, 'requests.get (" http://pastebin.com/raw/Yjs6FAfm ") .json()' funktioniert :) –

+0

@ cricket_007 ist es möglich, da ich 'encoding = 'utf-8- verwenden musste sig'', um komische Zeichen am Anfang der Datei zu vermeiden, da die Datei 'UTF-8-BOM' nicht' UTF-8' ist. – Andres

+0

Rechts ist das Problem am Anfang der Datei, wie in Zeile 1 Spalte 1 ersichtlich ' –

Antwort

4

Basierend auf wieder über die documentation lesen, es scheint, Sie müssen entweder auf die dritte Zeile

json_data = json.loads(text) 

ändern oder entfernen Sie die Zeile

text = json_file.read() 

seit read() bewirkt, dass der Index der Datei das Ende der Datei erreicht. (Ich nehme an, alternativ können Sie den Index der Datei zurücksetzen).

+0

Das funktioniert, aber warum kann ich die Datei nicht direkt öffnen? Nach dieser https://docs.python.org/3/library/json.html#json.load sollte ich dazu in der Lage sein. – Andres

+1

Ah, ich habe es herausgefunden; Wenn Sie 'read()' zuerst aufrufen, dann hat das Dateiobjekt seinen Index am Ende der Datei und es gibt nichts mehr, aus dem ein Json gemacht werden könnte. –

+0

OMG du hast Recht! Schön dort zu entdecken! – Andres

9

Versuchen Sie, diese

import json 

with open('filename.txt', 'r') as f: 
    array = json.load(f) 

print (array) 
+0

Ich bekomme immer noch die gleiche Ausnahme, 'r' ist der Standard-Öffnungsmodus – Andres

+1

mmm, ich habe nur die Datei kopiert und es hat für mich funktioniert. – lcastillov

+0

@Andres Ich vermute, das Problem ist mit Ihrer lokalen Datei. Nochmal Überprüfen. – lcastillov