首页 > 解决方案 > 试图访问python中的嵌套字典键

问题描述

我需要加载一个 json 并阅读内容以便稍后进行编辑。我正进入(状态

{TypeError}string indices must be integers

这是json结构(注意下面是json文件已经加载时的格式,否则显示双引号)

data ={'a':'hello','b':'{"date1":"9/21/2021","date2":"9/22/2021"}','c':'new'}

尝试访问data['b']['date1'] 时会引发错误

代码如下

jsonfile=open(file.json, "r")
data = json.load(jsonfile)
jsonfile.close()
date = data['b']['date1']

标签: pythonjson

解决方案


的内容data['b']是一个包含 JSON 文档的字符串:

'{"date1":"9/21/2021","date2":"9/22/2021"}'

因此,您应该首先将其转换为 JSON(字典 / 列表):

data_b = json.loads(data['b'])

现在它已转换为 dict,您已经可以访问它的键:

data_b["date1"]

如果要更新这些值,请更新字典,然后将其转换回字符串并重新分配给原始数据:

import json

data = {'a':'hello','b':'{"date1":"9/21/2021","date2":"9/22/2021"}','c':'new'}

data_b = json.loads(data['b'])
data_b["date1"] = "updated 1"
data_b["date2"] = "updated 2"

data['b'] = json.dumps(data_b)
print(data)

输出:

{'a': 'hello', 'b': '{"date1": "updated 1", "date2": "updated 2"}', 'c': 'new'}

要将其写回,您必须以写入模式 w打开文件,然后使用json.dump()file.write()

with open("file.json", 'w') as json_file:
    # Option 1
    json.dump(data, json_file)
    # Option 2
    # json_file.write(json.dumps(data))

推荐阅读