python - 在python中更新json对象中的值
问题描述
我正在努力更新 json 对象中的值。
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')
json 示例:
[{"id": 1, "name": "t1", "solved": "false"}, {"id": 2, "name": "t2", "solved": "false"}, {"id": 3, "name": "t3"}]
但是,当我检查 userBoard 的打印输出时,该值仍然是“假”。有人有什么主意吗?这需要以某种方式序列化吗?尝试了很多东西,但没有成功...
非常感谢!
解决方案
可以说这个问题在某种程度上是具体的,并且缺乏一些信息来提供简单的答案。因此,我将做出一些假设并提出解决方案。
首先,id
并且input
是 python 内置的,不应该用作变量名。我将故意使用这些带有_
前缀的字符串,以便您仍然可以以更安全的方式使用这些名称。
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!
json_ex_parsed
申请前的内容setItem
:
[{'id': 1, 'name': 't1', 'solved': 'false'},
{'id': 2, 'name': 't2', 'solved': 'false'},
{'id': 3, 'name': 't3'}]
之后:
[{'id': 1, 'name': 't1', 'solved': 'false'},
{'id': 2, 'name': 't2', 'solved': 'true'}, # note here has been updated
{'id': 3, 'name': 't3'}]
推荐阅读
- android-studio - 在 Mac OSX(Mojave) 上 - Android 模拟器在启动时不断崩溃
- go - Windows API 错误“句柄无效”
- java - 如何在 Linux 上使用用户名和密码连接到我的 mysql 数据库
- python - 如何使用 numpy 附加 2 个具有不同尺寸和形状的 numpy 图像数组
- regex - 删除电子邮件地址前的文字
- c++ - 客户端未收到 UDP 连接响应
- javascript - 验证成功后无需单击按钮即可删除验证错误消息
- android - Gradle 启动守护进程失败
- java - 如何并行处理 Iterables.partition(...) 结果以与 BatchGetItem API 一起使用?
- c++ - 我如何制作 C++ 医院管理程序的这个(逻辑)部分?