Пользовательская таблица преобразования JSON Python JSONEncoder CSV в JSON - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь преобразовать CSV в JSON для использования сasticsearch.Вот пример csv:

user,user_creation_time UserName1,2018-02-21T15:57:53+00:00 UserName2,N/A

типы массивов: user - str,

user_creation_time - Время ISO или str('N/A')
Проблема в том, что при загрузке ElasticSearch значение N/A завершается неудачно, поскольку ожидается тип date.

У меня есть больше полей времени с этой проблемой (после даты, после строки).Каков наилучший способ добиться этого?

В конце концов, функциональность должна быть такой:

csv

user,user_creation_time UserName1,2018-02-21T15:57:53+00:00 UserName2,N/A

python

{"user":"UserName1","user_creation_time":"2018-02-21T15:57:53+00:00"} {"user":"UserName2","user_creation_time":None}

json

{"user":"UserName1","user_creation_time":"2018-02-21T15:57:53+00:00"} {"user":"UserName2","user_creation_time":null}

Что я делаю сейчас:

import csv

with open(csv_file, 'r') as inf:
    reader = csv.DictReader(inf.readlines())

print(json.dumps(tuple(reader)))

1 Ответ

0 голосов
/ 09 октября 2018

Я закончил тем же, что и предложил @stovfl.И создал это https://gist.github.com/1oglop1/9950b033dc655f675ebc11ac122ab815

Еще одно грязное решение - заменить значения в строке, преобразовать их в json, сбросить json в строку, заменить другие значения и получить правильную структуру при повторной загрузке

with open(csv_file, 'r') as inf:
    file_content = inf.read()

no_na = file_content.replace('N/A', '').replace('not_supported', '')
rdr = csv.DictReader(no_na.splitlines())
records = json.dumps(tuple(rdr))
fixed_json = records.replace('""', "null").replace('"false"', "false").replace("'true'", "true")
print('jsn',records)
print(fixed_json)
print(json.loads(fixed_json))  # correct dict
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...