2017-04-26 4 views
0

Ich habe eine Liste, wo jedes Element Pfad zu JSON-Datei ist. Ich verwende folgenden Code in eine Textdatei zu schreiben:Anfügen von JSON-Dateien an Textdatei

list=['C:/Users/JAYANTH/Desktop/datasets/580317556516483072/source- 
tweet/580317556516483072.json', 
'C:/Users/JAYANTH/Desktop/datasets/580317998147325952/source- 
tweet/580317998147325952.json', 
..........] 
file=open("abc.txt","a") 
for i in range(len(list)) 
    with open(list[i]) as f: 
     u=json.load(f) 
     s=json.dumps(u) 
     file.write(s) 
file.close() 

dieser Code anhängt Daten in JSON-Dateien in txt-Datei. Bei dem Versuch, die Daten aus derselben Datei mit folgendem Code zu lesen:

with open('abc.txt','r') as f: 
    for each in f: 
     print(json.load(file)) 

ich die folgenden Störung erhalte:

Traceback (most recent call last): 
    File "C:\Users\JAYANTH\Desktop\proj\apr25.py", line 15, in <module> 
    print(json.load(file)) 
    File "C:\Users\JAYANTH\Desktop\proj\lib\json\__init__.py", line 268, in 
    load 
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, 
    **kw) 
    File "C:\Users\JAYANTH\Desktop\proj\lib\json\__init__.py", line 319, in 
    loads 
    return _default_decoder.decode(s) 
    File "C:\Users\JAYANTH\Desktop\proj\lib\json\decoder.py", line 339, in 
    decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "C:\Users\JAYANTH\Desktop\proj\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 auch json.loads versucht hat, verwenden, aber immer eine Fehlermeldung:

Traceback (most recent call last): 
    File "C:\Users\JAYANTH\Desktop\proj\apr25.py", line 15, in <module> 
    print(json.loads(file)) 
    File "C:\Users\JAYANTH\Desktop\proj\lib\json\__init__.py", line 312, in 
    loads 
    s.__class__.__name__)) 
TypeError: the JSON object must be str, not 'TextIOWrapper' 

Wie kann ich dieses Problem lösen?

+0

Wenn Sie lesen " abc.txt ", warum hast du eine for-Schleife. Einfach ausdrucken (json.load (f)) – Ashish

+0

Warum willst du das machen? Sie könnten einfach eine äußere Liste erstellen und jedes einzelne json-Objekt an diese outler-Liste anhängen, die wiederum ein einzelnes gültiges json-Objekt wird. Dann schreibe das einfach in eine Datei. – roganjosh

Antwort

0

Eine Verkettung von JSON ist nicht Json, Punkt. Diese Datei ist eine gültige Json:

[ 1, 2 , 
    { "a": "b" }, 
    3 ] 

und gibt dieses Python-Objekt: [1, 2, {'a': 'b'}, 3]

Aber das ist nicht mehr eine gültige JSON-Datei:

[ 1, 2 , 
    { "a": "b" }, 
    3 ] 
[ 1, 2 , 
    { "a": "b" }, 
    3 ] 

, weil es enthält 2 Objekt ohne Beziehungen .

Sie sollten alles in einer äußeren Liste beifügen, um es gültig zu machen:

[ 
[ 1, 2 , 
    { "a": "b" }, 
    3 ] 
, 
[ 1, 2 , 
    { "a": "b" }, 
    3 ] 
] 

So Generierung von Code sein sollte:

file=open("abc.txt","a") 
file.write("[\n")   # start of a list 
first = True 
for i in range(len(list)) 
    if first: 
     first = False 
    else: 
     file.write(",\n") # add a separating comma before every element but the first one 
    with open(list[i]) as f: 
     u=json.load(f) 
     s=json.dumps(u) 
     file.write(s) 
file.write("]\n")   # terminate the list 

file.close()