Объекты JSON печатаются в моем файле syslog. Мне нужно извлечь строку из журнала и преобразовать ее в JSON. У меня нет никаких проблем, извлекая строку между «{
» и «}
», но некоторые строки имеют экранирующий символ в них, и это вызывает json.loads
сбойPython - Преобразование строки с escape-символами в json
Вот проблема:
>>> import json
>>> resp = '{"from_hostname": {"value": "mysite.edu\"", "value2": 0, "value3": 1}}'
>>> json.loads(resp)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 365, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 381, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting , delimiter: line 1 column 41 (char 40)
>>> resp[40]
'"'
>>> resp[41]
','
>>> resp[39]
'"'
>>>
Когда json
видит \"
Я предполагаю, что он видит только "
и предполагает, что строка завершена, и она выдает ошибку разделителя.
Я попытался заменить \"
на \\"
, но это не работает.
ПРИМЕЧАНИЕ: \"
может происходить в начале или в конце или в середине строки.
Как это получить?
Если вы напечатаете 'resp', не будет' '\' ':' {"from_hostname": {"value": "mysite.edu" ", value2": 0, "value3": 1} } ' –
Всегда ли появляются значения? Вы можете попробовать' resp = re.sub (r '(: \ s * ") ([^,] *)",', lambda x: x.group (1) + x.group (2) .replace ("\" ", r" \ "") + '",', resp)', а затем 'print (json.loads (resp))' –
Как вы извлекаете Строки JSON? Можете ли вы опубликовать этот код? – mhawke