Как сделать json.loads с пользовательским разделителем в python? - PullRequest
0 голосов
/ 31 октября 2019

TLDR: Как я могу загрузить json.load с пользовательским разделителем, не заменяя разделитель запятой?

У меня есть искровой фрейм данных, который я хочу записать в CSV, и для этого мне нужно jsonize каждой строки в нем.

Итак, у меня есть следующий ряд pyspark:

Row(type='le', v=Row(occ=False, oov=False, v=True), x=966, y=340)

Я хочу подготовить ряд к CSV. Если я напишу в CSV с обычным json.dumps, я получу строку со многими запятыми, тогда метод read csv не читает файл (намного больше запятых)

Итак, я выполняю json.dumps сseparators = ("|", ":")), и я получаю строку s:

'["le"| [false| false| true]| 966| 340]'

Теперь я могу сделать:

json.loads(s.replace('|',','))

И я получаюжелаемый вывод:

['le', [False, False, True], 966, 340]

Теперь проблемная часть:

Я пишу его в CSV. Когда я читаю его, прежде чем пытаться загрузить json.loads, я получаю:

'[\\le\\"| [false| false| true]| 966| 340]"'

Требуемый вывод такой же, как и раньше:

['le', [False, False, True], 966, 340]

Но я не могу этого достичь.

Когда я пытаюсь сделать json.loads, я получаю:

json.decoder.JSONDecodeError: Expecting value: line 1 column 2 (char 1)

Когда я пытаюсь изменить '|'to ',':

s = s.replace('|',',')
s
Out: '[\\left_ear\\", [false, false, true], 966, 340]"'
json.loads(s)
json.decoder.JSONDecodeError: Expecting value: line 1 column 2 (char 1)

Этот пост является попыткой преодолеть предыдущую проблему, на которую я не нашел ответа: Преобразование нескольких столбцов массива структур в pyspark sql

Если я найду решение этой проблемы, оно мне поможет.

В итоге это строка, которую мне нужно проанализировать:

'[\\le\\"| [false| false| true]| 966| 340]"'

Как я могу это сделать?

...