读取 JSON 时,literal_eval 返回无效语法
Posted
技术标签:
【中文标题】读取 JSON 时,literal_eval 返回无效语法【英文标题】:literal_eval return invalid syntax when reading JSON 【发布时间】:2021-12-10 00:47:19 【问题描述】:读取 JSON 并尝试评估时,返回语法错误。
json 文件有以下数据
"communication":
"xml":
"xmlData": "<test vers=\"1.0\" >random</test>",
"user_id":"123456789"
,
,
代码 sn-p:
import ast
.
.
#json_file is the python obj which consists the data read from json file
.
val = ast.literal_eval(json.dumps(json_file))
print(val)
抛出错误:
Traceback (most recent call last):
File "./prog.py", line 12, in <module>
File "/usr/lib/python3.8/ast.py", line 59, in literal_eval
node_or_string = parse(node_or_string, mode='eval')
File "/usr/lib/python3.8/ast.py", line 47, in parse
return compile(source, filename, mode, flags,
File "<unknown>", line 4
"xmlData": "<test vers="1.0" >random</test>",
^
SyntaxError: invalid syntax
请提出解决语法错误的方法。 请注意,将 vers="1.0" 更改为 vers='1.0' 可以解决问题,但我没有此 JSON 文件的写入权限。我的应用程序只是在读取数据。
【问题讨论】:
如果直接加载字符串来制作字典,你可以用正则表达式或蛮力data_str.replace('vers="1.0"', "vers='1.0'")
解析字符串,你会遇到嵌套双引号冲突,然后使用json.load
生产中的xml数据将是动态的。例如:你的json是无效的,如果你不能修改文件然后在python中修改数据。
更正的json
"communication":
"xml":
"xmlData":"<test vers=\"1.0\" >random</test>",
"user_id":"123456789"
我的代码
import json
import ast
fd = open("text.json")
json_file = json.load(fd)
val = ast.literal_eval(json.dumps(json_file))
print(val)
输出
'communication': 'xml': 'xmlData': '<test vers="1.0" >random</test>', 'user_id': '123456789'
【讨论】:
以上是关于读取 JSON 时,literal_eval 返回无效语法的主要内容,如果未能解决你的问题,请参考以下文章
ValueError:添加 Keras 层时带有 ast.literal_eval() 的节点或字符串格式错误
使用 SwiftyJSON 从 JSON 读取数据时返回 Null
代码在读取 JSON 时返回错误,并且 BigQuery SQL 的 JSON 结构中不存在引用的部分
Pandas read_csv 转换器 – 如何处理异常 (literal_eval SyntaxError)