2014-01-10 6 views
16

Hallo Ich versuche, die Daten aus einer JSON-Datei zu nehmen und einfügen und ID führen Sie dann POST REST. meine Datei data.json hat:Python lesen JSON-Datei und ändern

{ 
    'name':'myname' 
} 

und ich möchte eine ID hinzufügen, so dass die JSON-Daten wie folgt aussieht:

{ 
    'id': 134, 
    'name': 'myname' 
} 

Also habe ich versucht:

import json 
f = open("data.json","r") 
data = f.read() 
jsonObj = json.loads(data) 

I kann die JSON-Formatdatei nicht laden. Was soll ich tun, damit ich die JSON-Datei in JSON-Objekt konvertieren und einen anderen ID-Wert hinzufügen kann.

+3

Das ist nicht gültig json. Eine Zeichenfolge sollte in ** Anführungszeichen ** eingeschlossen sein. – falsetru

+0

Danke, dass es gelöst hat. – codeBarer

Antwort

26

Stellen Sie den Artikel mit data['id'] = ... ein.

import json 

with open('data.json', 'r+') as f: 
    data = json.load(f) 
    data['id'] = 134 # <--- add `id` value. 
    f.seek(0)  # <--- should reset file position to the beginning. 
    json.dump(data, f, indent=4) 
    f.truncate()  # remove remaining part 
+5

ohne Bezug: Das JSON-Format ist für Unicode-Text definiert. Sie könnten 'mit codecs.open ('data.json', 'r +', encoding = 'utf-8') als f' – jfs

9

falsetru Lösung ist schön, hat aber einen kleinen Fehler:

Es sei original 'id' Länge war größer als 5 Zeichen. Wenn wir dann mit der neuen 'ID' (134 mit nur 3 Zeichen) ablegen, ist die Länge der Zeichenfolge, die von Position 0 in Datei geschrieben wird, kürzer als die ursprüngliche Länge. Zusätzliche Zeichen (z. B. "}") verbleiben in der Datei vom ursprünglichen Inhalt.

Ich löste das durch Ersetzen der ursprünglichen Datei.

import json 
import os 

filename = 'data.json' 
with open(filename, 'r') as f: 
    data = json.load(f) 
    data['id'] = 134 # <--- add `id` value. 

os.remove(filename) 
with open(filename, 'w') as f: 
    json.dump(data, f, indent=4) 
+0

verwenden Ich habe die Antwort aktualisiert, um einen Fehler zu beheben. – falsetru