首页 > 解决方案 > 读取 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 文件的写入权限。我的应用程序只是读取数据。

标签: pythonjsonpython-3.xxmlabstract-syntax-tree

解决方案


您的 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'}}}

推荐阅读