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

如何将str类型的文件内容转换为Python字典?

问题描述

我编写了以下代码用于读取JSON文件:

import json
with open('json_data.json') as json_file:
    df = json.load(json_file)

目标文件内容如下:

{'api_version': None,
'kind': None,
'metadata': {'annotations': ....
.....
'allocatable': {'cpu': '4',
'ephemeral-storage': '1055762868Ki',
'hugepages-1Gi': '0',
'hugepages-2Mi': '0',
'memory': '3953464Ki',
'pods': '110'},
.......
'phase': None,
'volumes_attached': None,
'volumes_in_use': None}}

但读取后的数据类型为<class 'str'>,我需要将该字符串转换为Python字典,以便访问allocatable下的cpu、memory等字段。尝试过pymarshaler.marshal的Unmarshal函数,但无效。

解决方案

方法1:使用标准库ast.literal_eval(推荐)

你的文件内容是Python字面量格式(单引号、None),而非标准JSON,ast.literal_eval可以安全解析这类格式,无需额外安装依赖:

import ast

with open('json_data.json', 'r') as f:
    raw_str = f.read()
data_dict = ast.literal_eval(raw_str)

# 访问allocatable字段示例
print(data_dict['allocatable']['cpu'])  # 输出: '4'
print(data_dict['allocatable']['memory'])  # 输出: '3953464Ki'

方法2:转换为标准JSON格式后解析

如果一定要用json模块,可以先将文件内容中的非标准JSON部分替换为标准格式,再解析:

import json

with open('json_data.json', 'r') as f:
    raw_str = f.read()
# 替换单引号为双引号,None为JSON标准的null
standard_json_str = raw_str.replace("'", '"').replace('None', 'null')
data_dict = json.loads(standard_json_str)

# 访问示例
print(data_dict['allocatable']['pods'])  # 输出: '110'

注:方法2仅适用于文件内容中没有嵌套单引号(比如字符串值内部的单引号)的场景,否则替换会破坏结构,此时优先使用方法1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:55:16