JSON Eintrag hinzufügen (updaten) Python 3.3.5

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

Hi Leute, ich möchte gerne, über meinen Webserver, einen Eintrag in meiner JSON Datei ergänzen, momentan wird er immer überschrieben. Gibt es dazu eine einfache realisierung ? Ich habe bis jetzt das hier versucht.

Code: Alles auswählen

string = {"test":  {'Name': test[0], 'Nachname': test[1],},}

 with open("content/copy.json", "r") as g:   

	 data = json.load(g)   
	 data.update(string)

	 json.dump(data,f, sort_keys=True,indent=2)

with open("content/daten.json", "w") as f:

	 json.dump(erg,f, sort_keys=True,indent=2)

Was mache ich falsch ?


Gruß
BlackJack

@aCrylic: Was meinst Du mit ergänzen? `string` ein unpassender Name für ein Wörterbuch.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@aCrylic: Was steckst Du rein, was kommt raus und was erwartest Du?

Natürlich überschreibst Du mit `update` den Key "test". Du postest mal wieder schrecklich formatierten, fehlerhaften Code. In Zeile 8 ist `f` nicht definiert, in Zeile 12 `erg`, Zeile 3 ist falsch eingerückt.
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

Ja, sorry für die Einrückung, muss mich noch besser machen da.

Ich will einfach einen "String" ist ja egal was z.b von einem HTML Formular, in meine JSON datei erweitern, momentan klappt das mit einem Array, wo ich alles zwischenspeicher, aber ich will dies ohne Array machen. Geht das irgendwie ? es gibt doch irgendie "w+" "a" "a+" für die open methode, kann man damit was anfangen ?
BlackJack

@aCrylic: Du kannst eine JSON-Struktur in einer Datei nicht erweitern, dazu müsste man in Dateien etwas *einfügen* können. Du musst die Datenstruktur parsen — dann ist das kein JSON mehr sondern eine Datenstruktur in Python, diese Datenstruktur entsprechend Deinen Wünschen verändern, und dann wieder als JSON in eine Datei serialisieren.

Also gehen wir mal von JSON weg, denn das hat mit dem Problem nichts zu tun. Wie sieht die Datenstruktur aus. Was willst Du damit tun. Und wie soll sie dann hinterher aussehen.

Mit Arrays würde ich das auch nicht machen wollen. Aber ich habe den Verdacht du meintest und benutzt eigentlich eine Liste und kein Array.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@aCrylic: wie in Deinem anderen Thread schon beschrieben, kann JSON nur komplett gelesen und geschrieben werden. Da die Vorgabe, alles mit JSON zu machen, sowieso für ein Produktivsystem quatsch ist, würde ich an Deiner Stelle auch keinen Gedanken an irgendwelche komplizierten angeblichen Verbesserungen stecken.
aCrylic
User
Beiträge: 35
Registriert: Montag 6. Oktober 2014, 23:01

Ja, also was deiner Meinung nach, wäre am einfachsten jetzt für mich ? Also ich gebe die JSON datei auf meiner Startseite per Javascript aus, das klappt alles soweit.


Ich füge die weiteren "Strings" so in mein array rein per array.append() funktion

Das ist der Eintragende String in mein Array ---> {"Teilnehmer": {'Name': test1, 'Nachname': test2, 'kennwort': test3},}

Mein Gedanke ist jetzt, da in dem String "Teilnehmer" der Key ist und Name, Nachname etc. die Values sind, einfach mit einer for-schleife durchzugehen und nach Regeln soll sich nur ein Benutzer löschen dürfen, wenn 3 Values vom String mit den eingegeben in dem Formular per Html übereinstimmen, also einfacher gesagt, ich muss nach 3 bestimmten Values in dem String suchen. Wie stelle ich dies genau an mit einer for-schleife in Python ? Das wäre eigentlich der einfachste Weg glaube ich, wie sich ein Benutzer löschen kann aus der Liste, die JSON datei wird dann einfach neu überschrieben, wenn der Eintrag aus dem Array entfernt ist.

meine for schleife(die nicht so richtig klappt)

for key, value in array.iteritems():
print (key, value)


dann würde ich halt noch ein if einbauen also
if("variable == "name && variable2 == nachname && variable3 == kennwort)
dann lösche Key (also den Teilnehmer) aus dem Array.


Das will ich realisieren, also ganz simple eigentlich, nur mir macht die Syntax gerade zu schaffen in Python -.-
BlackJack

@aCrylic: Du solltest aufhören das auf die Python-Syntax zu schieben. Die kann nichts dafür das Du sehr ungenau bis falsch mit Begriffen umgehst die auch in anderen Programmiersprachen so verwendet falsch wären. Mir ist ehrlich gesagt immer noch nicht klar wie Deine Datenstruktur(en) nun *tatsächlich* aussehen.

Wie sieht die Datenstruktur für zwei ganz konkret eingetragene Benutzer aus? Welche Operationen sollen darauf ausgeführt werden? Welche Argumente stehen dafür jeweils zur Verfügung?
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@aCrylic: Du willst also eine Liste verwenden. Was Du da als Beispiel hast ist aber ein Dictionary, das einen Key mit einem Dictionary als Value hat. Klappt nicht ist auch kein guter Anfang für die Fehlersuche. Python liefert immer ganz ausführliche Tracebacks. Das `if` ist ein Keyword und keine Function, was sollen also die Klammern? `&&` heißt unter Python `and` und durch Raten ist selten ein guter Programmierer vom Himmel gefallen. Wie man mit Listen und Dictionaries umgeht, steht in jedem Anfängertutorial.
Antworten