You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中访问JSON文件中的指定字典?

解决方法

一、先修正JSON文件的合法性问题

你当前的JSON文件格式不合法——JSON规范要求只能有一个顶级元素(要么是对象,要么是数组),而你直接把两个独立字典并列,导致标准json.load无法解析。下面分两种场景处理:

场景1:能重新生成合法的JSON文件

如果还能重新生成文件,推荐以下两种写法:

方案A:合并成一个大字典(最方便后续访问)

把所有平台的信息整合到一个顶级字典里,用平台名称作为键:

import json

# 原始的两个平台字典
amazon_info = {"email": "someone@amazon.com", "password": "123456"}
so_info = {"email": "somebody@stackoverflow.com", "password": "password"}

# 合并为一个大字典
all_accounts = {
    "Amazon": amazon_info,
    "Stack Overflow": so_info
}

# 写入文件(注意用"w"写入模式,不是"r"只读模式)
with open("file.json", "w") as f:
    json.dump(all_accounts, f, indent=4)

生成的合法JSON如下:

{
    "Amazon": {
        "email": "someone@amazon.com",
        "password": "123456"
    },
    "Stack Overflow": {
        "email": "somebody@stackoverflow.com",
        "password": "password"
    }
}

后续访问直接通过键名定位:

import json

with open("file.json", "r") as f:
    accounts = json.load(f)

# 获取Amazon的邮箱
print(accounts["Amazon"]["email"])
# 获取Stack Overflow的密码
print(accounts["Stack Overflow"]["password"])

方案B:存为JSON数组

如果想保留独立字典的结构,就把它们放到数组里:

import json

account_list = [
    {"Amazon": {"email": "someone@amazon.com", "password": "123456"}},
    {"Stack Overflow": {"email": "somebody@stackoverflow.com", "password": "password"}}
]

with open("file.json", "w") as f:
    json.dump(account_list, f, indent=4)

生成的JSON数组:

[
    {
        "Amazon": {
            "email": "someone@amazon.com",
            "password": "123456"
        }
    },
    {
        "Stack Overflow": {
            "email": "somebody@stackoverflow.com",
            "password": "password"
        }
    }
]

访问时可以按索引或遍历查找:

import json

with open("file.json", "r") as f:
    accounts = json.load(f)

# 按索引取第一个字典(Amazon)
print(accounts[0]["Amazon"]["password"])
# 遍历查找Stack Overflow的信息
for item in accounts:
    if "Stack Overflow" in item:
        print(item["Stack Overflow"]["email"])

场景2:已有不合法的JSON文件,直接处理

如果没办法重新生成文件,可以用json.JSONDecoder的raw_decode方法逐个解析顶级对象:

import json

account_list = []
with open("file.json", "r") as f:
    decoder = json.JSONDecoder()
    content = f.read().strip()
    pos = 0
    # 循环解析每个顶级字典
    while pos < len(content):
        obj, pos = decoder.raw_decode(content, pos)
        account_list.append(obj)
        # 跳过字典间的空白字符
        while pos < len(content) and content[pos].isspace():
            pos += 1

# 现在account_list里就是两个字典
print(account_list[0]["Amazon"]["email"])
print(account_list[1]["Stack Overflow"]["password"])

二、补充注意点

你之前写的json.dump(my_dict, open("file.json", "r"), indent=4)有个低级错误:写入文件必须用"w"(写入)模式,而不是"r"(只读)模式,否则会直接抛出权限错误。

内容的提问来源于stack exchange,提问作者lvjsmn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:35:16