Станадртные методы не удаляют до конца.
В кратце ситуация, из elasticsearch библиотекой забираю определенный документ, с определенной структурой, который мне нужно переделать. Т.е. эти строки уже лежат в Elastic и я ожидаю что не нужно будет с ними возится, но по странной, даже непонятной мне причине, стандартная библиотека - не экранирует кавычки, вместо полей в кавычках массивы в JSON возвращает с апострофами, т.е. например:
{
"lastname": "Иванов",
"education": [
'пту №1',
'университет патрисы лумумбы'
],
"hobbies": "Люблю вышивать "крестиком" и
вязать на спицах"
}
с кавычками частично справился,
нарисовал тупую функцию (внимание побочка! у перфекционистов могут закровоточить глаза):
def filter(mystr) -> str:
mystr = str(mystr)
mystr = mystr.replace('\r\n', u' ')
mystr = mystr.replace('\r', u' ')
mystr = mystr.replace('\n', u' ')
mystr = mystr.replace('\\r', u' ')
mystr = mystr.replace('\\n', u' ')
mystr = mystr.replace('\\r\\n', u' ')
mystr = mystr.replace('\'', u'"')
mystr = mystr.replace('\"', u'\\\"')
mystr = mystr.replace(u'True', u'true')
mystr = mystr.replace(u'False', u'false')
mystr = mystr.replace(u'None', u'null')
re.sub('^\s+|\n|\r|\s+$', u'', mystr)
return str(mystr)
Она частично работает, но из 100 документов в 5 пропускаются строки с переносом.
Глянул в hex строчку с переносом (между "и" & "в":
я вижу 0xD 0xA которые вроде должны были убиться функцией, но они там остаются, но в юникоде же это должно быть 0x000D и 0x000A если не ошибаюсь. (т.е. сами символы закодированы верно 0xD0B8 & 0xD0B2). Или это ок для UTF-8?
Есть ли какой стандартный метод или функция или библиотека, которой можно скормить JSON для bulk в elasticsearch, что бы она обошла все значения рекурсивно значения ключей и всё сделала "зашибись".
Спасибо.