如何将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
相关产品推荐
相关产品推荐

