Python读取JSON文件内数组得到字符串而非列表该如何解决
问题原因
你当前的prueba.json文件存储的是两次JSON序列化后的结果:第一次是把Python列表转为JSON数组字符串,第二次又把这个字符串作为值再次做了JSON序列化写入文件,因此文件实际存储的是字符串类型的JSON值,而非JSON数组。
你直接给变量赋值的场景下,Python会自动处理字符串字面量里的转义符,实际f变量拿到的就是无外层引号、无转义符的数组JSON串,因此单次json.loads就能得到列表;但读取文件时拿到的是包含外层引号、内部转义符的原始内容,单次json.loads只会解析得到内容为数组JSON串的字符串,而非列表本身。
解决方案
你可以按需选择以下两种方案调整:
- 方案1:修改JSON文件内容
直接删除prueba.json的外层双引号和内部的转义斜杠,文件内容改为纯JSON数组即可:
["sbs", "sb", "bs", "v", ""]
调整后原有读取代码无需修改,运行即可直接得到列表类型结果,更符合JSON文件的规范使用方式。
- 方案2:不修改文件,调整解析逻辑
在原有解析基础上多加一次json.loads调用,对第一次解析得到的字符串做二次解析即可拿到列表,示例代码如下(补充了更安全的with文件读取写法,自动完成文件关闭操作):
import json with open("prueba.json", "r", encoding="utf-8") as f: # 第一次解析得到字符串类型的数组文本 str_content = json.load(f) # 第二次解析得到目标列表 file_data = json.loads(str_content) print(type(file_data)) # 输出 <class 'list'> print(file_data)
内容的提问来源于stack exchange,提问作者jgames07
相关产品推荐
相关产品推荐

