读取 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数据将是动态的。例如:random 【参考方案1】:

你的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)

Streamreader 在读取大型 JSON 文件时无法读取服务器 500 错误中的文件

当 dataType 设置为 JSONP 时读取 JSON 响应