json - 如何使用python从字符串列表中删除生成的json旁边的双引号
问题描述
我的 JSON 是输入 json { 'debug': None, 'traceback': None, 'rsname': None, 'resolutionStatus': 0, 'algorithmResponseInfo': None, 'rules': "['check']", 'rulesResults ': '-RNCID Found', 'mmlCommand': 'tk_com', 'KMmmlCommand': 'cat "tk"', 'similarityScore': {'similarityUI': 100 }} 这是无效的,我想将其转换为有效我想""
使用 python 从规则列(列表)中删除双引号和单反斜杠。我已经尝试了以下方法,但没有奏效-
data = data.replace('"',"\\'").replace("'", '"').replace("True","true").\
replace("None","null").replace("False","false").replace("\'", '"').replace("'", '"')
data = json.loads(data)
输出为 - data = { "debug": null, "traceback": null, "rsname": null, "resolutionStatus": 0, "algorithmResponseInfo": null, "rules": \ "["check"]", " rulesResults": "-RNCID Found", "mmlCommand": "tk_com", "KMmmlCommand": "cat "tk"", "similarityScore": { "similarityUI": 100 }}
但我需要删除额外的反斜杠和预期的双引号是-data = {“debug”:null,“traceback”:null,“rsname”:null,“resolutionStatus”:0,“algorithmResponseInfo”:null,“rules”: [“检查”],“rulesResults”:“找到-RNCID”,“mmlCommand”:“tk_com”,“KMmmlCommand”:“cat“tk””,“similarityScore”:{“similarityUI”:100 }}
解决方案
你所拥有的根本不是 JSON,而是 Python 文字。只是 Python 的字面量与 JSON 非常相似。转换它的安全方法是使用 ast.literal_eval:
from ast import literal_eval
import json
data = (
"{ 'debug': None, 'traceback': None, 'rsname': None,"
" 'resolutionStatus': 0, 'algorithmResponseInfo': None, "
"'rules': \"['check']\", 'rulesResults': '-RNCID Found', "
"'mmlCommand': 'tk_com', 'KMmmlCommand': 'cat \"tk\"',"
" 'similarityScore': {'similarityUI': 100 }}"
python_doc = literal_eval(data)
json_str = json.dumps(python_doc)
# {"debug": null, "traceback": null, "rsname": null, "resolutionStatus": 0,
# "algorithmResponseInfo": null, "rules": "['check']",
# "rulesResults": "-RNCID Found", "mmlCommand": "tk_com",
# "KMmmlCommand": "cat \"tk\"", "similarityScore": {"similarityUI": 100}}
print(json_str)
不安全的替代方法literal_eval
是eval
. 问题eval
在于,如果攻击者可以控制输入,他们就可以导致任意代码运行。
推荐阅读
- docker - 警告:目录'/home/jovyan/.cache/pip'
- javascript - 如何使用 Svelte + Flask (Jinja2) 模板?
- powershell - System.DllNotFoundException:无法加载 DLL 'System.Data.SQLite.DLL':(来自 HRESULT 的异常:0x8007045A)
- python - 将列转换为相同的格式
- batch-file - 如何在批处理编程中替换字符串
- kubernetes - 列出过去 24 小时内新创建的 Kubernetes pod
- python - PyPDF2 提取空白文本
- kubernetes-ingress - 使用入口路径从 Kubernetes 集群中访问服务
- pytorch - PyTorch 1.7 的 cuda 版本 9.2、10.1、10.2、11.0 之间的区别
- vmware-clarity - 混合“核心”表单组件和“角”表单组件