python - 读取 JSON 时,literal_eval 返回无效语法
问题描述
读取 JSON 并尝试评估时,返回语法错误。
json文件具有以下数据
{
"communication":{
"xml":{
"xmlData": "<test vers=\"1.0\" >random</test>",
"user_id":"123456789"
},
},
}
代码片段:
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 文件的写入权限。我的应用程序只是读取数据。
解决方案
您的 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'}}}
推荐阅读
- python - Python切片和替换
- firebase - 我可以将 GoogleAPI 与通过 Firebase 身份验证获取的 refresh_token 一起使用吗?
- python - 跳过在 python 中绘制 NaN 和 inf 值
- string - Unicode 中阿拉伯字母的结构
- python - pygame.error: 视频系统未初始化 pygame.init() 已调用
- augmented-reality - Spark AR 补丁:在 3 个画布之间切换
- python - 如何使用正则表达式在字符串中重复多次的模式
- c++ - 如果你有两个同名的函数(重载),并且有一个转换构造函数,会调用转换构造函数吗?
- c# - 有没有办法通过在 c# 中结束子字符串来对字符串列表进行排序?
- python-3.x - 如何在 tkinter 的单个应用程序窗口中打开子框架?