как удалить двойные кавычки вне сгенерированного json из списка строк, используя python - PullRequest
0 голосов
/ 21 июня 2020

Мой 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}}, что является недопустимым и Я хочу преобразовать его в действительный json Я хочу удалить "" двойные кавычки и одинарные backsla sh из столбца (списка) правил, используя 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}}

, но мне нужно удалить лишнюю backshla sh и двойные кавычки ожидаются - 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}}

1 Ответ

0 голосов
/ 21 июня 2020

То, что у вас там, вовсе не 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 заключается в том, что если злоумышленник может контролировать ввод, он может вызвать запуск произвольного кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...