【问题标题】:literal_eval return invalid syntax when reading JSON读取 JSON 时,literal_eval 返回无效语法
【发布时间】: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

标签: python json python-3.x xml abstract-syntax-tree


【解决方案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'}}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2011-05-20
    • 2020-10-26
    • 2013-07-16
    • 2012-04-04
    • 1970-01-01
    相关资源
    最近更新 更多