Aktualisieren des Werts im Json-Objekt in Python
Ich habe Probleme mit der Aktualisierung eines Werts in einem Json-Objekt.
import json
userBoard = '' #see example below. is loaded in a separate function
@app.get("/setItem")
def setItem():
id = request.args.get('itemId')
id = int(id[2:]) # is for instance 2
for item in json.loads(session['userBoard']):
if item['id'] == id:
item['solved']='true'
else:
print('Nothing found!')
return('OK')
Beispiel für das json:
[{"id": 1, "name": "t1", "solved": "false"}, {"id": 2, "name": "t2", "solved": "false"}, {"id": 3, "name": "t3"}]
Wenn ich jedoch den Ausdruck des userBoards überprüfe, ist der Wert immer noch 'false'. Hat jemand eine Idee? Muss das irgendwie serialisiert werden? Habe schon vieles probiert aber es hat nicht geklappt...
Vielen Dank!
Man könnte sagen, die Frage ist irgendwie spezifisch und es fehlen einige Informationen, um eine einfache Antwort zu geben. Ich werde also einige Annahmen treffen und eine Lösung vorschlagen.
Erstens id
und input
sind Python-Integrationen und sollten nicht als Variablennamen verwendet werden. Ich werde diese Zeichenfolgen _
absichtlich mit einem Präfix verwenden, damit Sie diese Namen noch sicherer verwenden können.
import json
from typing import List
json_ex = '[{"id": 1, "name": "t1", "solved": "false"}, {"id": 2, "name": "t2", "solved": "false"}, {"id": 3, "name": "t3"}]'
_id = 2 # for now a constant for demonstration purposes
def setItem(_input: List[dict]):
for item in _input:
if (this_id := item['id']) == _id: # requires python 3.8+, otherwise you can simplify this
item['solved'] = 'true'
print(f'Updated item id {this_id}')
else:
print('Nothing found!')
json_ex_parsed = json.loads(json_ex) # this is now a list of dictionaries
setItem(json_ex_parsed)
Output:
Nothing found!
Updated item id 2
Nothing found!
Der Inhalt json_ex_parsed
vor der Bewerbung setItem
:
[{'id': 1, 'name': 't1', 'solved': 'false'},
{'id': 2, 'name': 't2', 'solved': 'false'},
{'id': 3, 'name': 't3'}]
und danach:
[{'id': 1, 'name': 't1', 'solved': 'false'},
{'id': 2, 'name': 't2', 'solved': 'true'}, # note here has been updated
{'id': 3, 'name': 't3'}]