Ich versuche, eine JSON-Multiline-Datei unter Verwendung der json
-Bibliothek in Python 2.7 zu analysieren. Eine vereinfachte Beispieldatei ist unten angegeben:Problem beim Analysieren einer mehrzeiligen JSON-Datei mit Python
{
"observations": {
"notice": [
{
"copyright": "Copyright Commonwealth of Australia 2015, Bureau of Meteorology. For more information see: http://www.bom.gov.au/other/copyright.shtml http://www.bom.gov.au/other/disclaimer.shtml",
"copyright_url": "http://www.bom.gov.au/other/copyright.shtml",
"disclaimer_url": "http://www.bom.gov.au/other/disclaimer.shtml",
"feedback_url": "http://www.bom.gov.au/other/feedback"
}
]
}
}
Mein Code ist wie folgt:
import json
with open('test.json', 'r') as jsonFile:
for jf in jsonFile:
jf = jf.replace('\n', '')
jf = jf.strip()
weatherData = json.loads(jf)
print weatherData
Trotzdem bekomme ich einen Fehler wie unten dargestellt:
Traceback (most recent call last):
File "test.py", line 8, in <module>
weatherData = json.loads(jf)
File "/home/usr/anaconda2/lib/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "/home/usr/anaconda2/lib/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/home/usr/anaconda2/lib/python2.7/json/decoder.py", line 380, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting object: line 1 column 1 (char 0)
nur einige Tests zu tun Ich habe den Code so geändert, dass ich nach dem Entfernen von Zeilenumbrüchen und dem Entfernen der führenden und nachfolgenden Leerstellen den Inhalt in eine andere Datei (mit der Erweiterung json
) schreibe. Überraschenderweise bekomme ich beim Lesen der letzten Datei keinen Fehler und das Parsen ist erfolgreich. Der modifizierte Code ist wie folgt:
import json
filewrite = open('out.json', 'w+')
with open('test.json', 'r') as jsonFile:
for jf in jsonFile:
jf = jf.replace('\n', '')
jf = jf.strip()
filewrite.write(jf)
filewrite.close()
with open('out.json', 'r') as newJsonFile:
for line in newJsonFile:
weatherData = json.loads(line)
print weatherData
Die Ausgabe ist wie folgt:
{u'observations': {u'notice': [{u'copyright_url': u'http://www.bom.gov.au/other/copyright.shtml', u'disclaimer_url': u'http://www.bom.gov.au/other/disclaimer.shtml', u'copyright': u'Copyright Commonwealth of Australia 2015, Bureau of Meteorology. For more information see: http://www.bom.gov.au/other/copyright.shtml http://www.bom.gov.au/other/disclaimer.shtml', u'feedback_url': u'http://www.bom.gov.au/other/feedback'}]}}
Jede Idee, was gehen könnte, wenn neue Linien und weißen Flächen vor der Verwendung json
Bibliothek abgezogen werden?
Danke @OkezieE. Das Laden der gesamten Datei über 'load' macht den Trick. – hypersonics