我看到了关于这个主题的其他几个问题,但即使如此,我也无法解决这个特定案例中的问题。
在 json 文件中,我试图从嵌套列表中获取某个整数,向其中添加另一个(固定)整数,然后将修改后的整数写回到 json 文件中。 我尝试修改的整数位于 json 的嵌套列表中,如下所示: [头] -->'生物列表' -------->value [此列表中未命名的多个条目,每个条目都括在一对大括号内] ------------>'FactionID' ---------------------->'值:'
我想修改“FactionID”“value”整数(向其添加固定整数)并将结果写回到json文件中。
有一个充满 json 文件的目录,我正在尝试执行此操作。
我的 json 看起来像这样(我已经把它删减了很多,但希望它仍然可以解析):
`{
"__data_type": "GIT ",
"AreaProperties": {
"__struct_id": 100,
"type": "struct",
"value": {
}
},
"Creature List": {
"type": "list",
"value": [
{
"__struct_id": 4,
"Appearance_Type": {
"type": "word",
"value": 242
},
"FactionID": {
"type": "word",
"value": 2
},
}
}
}
我无法访问 ['Creature List']['value'] 中的子项。其中可能有几个不同的子列表。在我看来,由于 ['Creature List']['value'] 下的子列表没有整数或字符串名称来标识条目,因此可能存在问题?但我无法编辑 json 来解决这个问题。
这是我现在用于测试目的的代码:
for filename in os.listdir(directory):
if filename.endswith('.git.json'):
file_path = os.path.join(directory, filename)
try:
with open(file_path, 'r') as f:
data = json.load(f)
for key, value in data.items():
if key == 'Creature List' and isinstance(value, dict) and 'value' in value:
for creature in value:
if 'FactionID' in creature:
creature['FactionID']['value'] += 46
print(filename)
print(creature)
print(creature['FactionID']['value']
with open(file_path, 'w') as f:
json.dump(data, f, indent=4)
print(f"Modified {filename}")
except (json.JSONDecodeError, FileNotFoundError) as e:
print(f"Error processing {filename}: {e}")
我尝试使用例如获取 FactionID“值”整数print(data['Creature List']['value']['FactionID']['value']),但这会引发错误。
我对 python 没有太多经验,感谢任何帮助。谢谢
首先,不需要迭代 json 数据中的所有顶级键,因为您专门寻找
"Creature List"
键。
直接访问即可,如下所示:
data["Creature List"]
在其中,您知道您正在寻找
"value"
键,因此您也可以直接访问该键:
data["Creature List"]["data"]
这是一个项目列表,因此您需要对其进行迭代:
for item in data["Creature List"]["data"]:
然后对于你找到的每一项,你想要添加一个固定的整数到
["FactionID"]["value"]
。
所以把它们放在一起,我想这就是你想要的:
for item in data["Creature List"]["data"]:
item["FactionID"]["value"] += 7