#python #json #string
#python #json #строка
Вопрос:
Я пытаюсь создать объект son из необработанной строки, которую я получаю в потоке реального времени для обработки. Строка, которую я обрабатываю, является:
{‘check_1’:{‘key_1’:15017.118,‘key_2’:’HTTPConnectionPool(host=‘host_1’, port=80): Read timed out. (read timeout=15)’,’key_3’:’Some reason here’}}
Я пытаюсь заменить одинарную кавычку двойными кавычками чем-то вроде
str = str.replace(",'", ',"').replace("',", '",')
str = str.replace(":'", ':"').replace("':", '":')
str = str.replace("{'", '{"').replace("'}", '"}')
но значение для key_2
вызывает проблему, когда я это делаю, json.loads(str)
потому что значение key_2
имеет несколько одинарных кавычек.
Один из способов, о котором я думаю, — это использование регулярных выражений с обратным распространением. Есть ли какой-либо другой способ преобразовать строки этого типа в объект son.
Комментарии:
1. Есть ли у вас контроль над исходным кодом? Похоже, что он отправляет недопустимый JSON.
2. Ни один из ваших элементов и ключей не заключен в кавычки обратите внимание:
'
вы используете ключ-апостроф, я думаю, он вызывается. Тот, что рядом с вашим 13. для key2 у вас есть пробел между завершающим key1 и начальным key2. Итак, вам не хватает одной замены: .replace(«, ‘», ‘, «‘)
4. Помимо определенных символов кавычек (если они действительно не являются парами кавычек слева и справа), у вас есть вложенные кавычки, которые будет сложно обработать должным образом. Это ошибка в производителе, и ее следует исправить.
5. Смотрите кавычки ASCII и Unicode для получения дополнительной информации о том, что я сказал ранее относительно используемых кавычек. FWIW Я также согласен с @chepner в том, что лучшим решением было бы исправить источник этих строк, а не фиктивный вывод, который он выдает.
Ответ №1:
Этот быстрый взлом с библиотекой re, похоже, работает
import re
thestring = re.sub(r'[‘’]', '"', thestring) # don't call your variable str
thestring = re.sub(r'="(S )"', r"='1'", thestring)
print( json.loads(thestring))
Комментарии:
1. Моя ошибка, сначала замена в двойные кавычки, затем в одинарные кавычки, когда встречается символ «=». Исправлено
2. это недопустимый json, и даже вы преобразуете все отдельные ‘ в » как это было бы object, поскольку внутри было бы несколько »