Определить из входной строки, если в формате json_newline - PullRequest
0 голосов
/ 14 января 2019

У меня есть строка данных json, хотя иногда это «обычный» json, а иногда данные в формате json-lines. Вот текущий способ, которым я тестирую, чтобы увидеть, какой это формат:

json_newlines = all([_line.strip()[-1].endswith((']', '}')) for _line in file_data.split('\n') if _line.strip()])

Есть ли лучший способ сделать это, или вышесказанное кажется хорошим способом?

1 Ответ

0 голосов
/ 15 января 2019

Вы можете использовать встроенную библиотеку json, чтобы попытаться загрузить обычный JSON, если не получится (не правильный «обычный» формат), попробуйте затем с помощью: jsonlines .

Ваше текущее решение не является неправильным, но имеет недостаток, заключающийся в том, что вы должны анализировать (вручную) всю строку, чтобы проверить, является ли формат или нет, я предлагаю делегировать эту работу во встроенной библиотеке json.

Пример:

import json
import jsonlines

loaded_data = {}

try:
    loaded_data = json.loads(json_data)
except ValueError as err:
    try:
        # Try to read the data here with.
        lines = json_data.split('\n')
        reader = jsonlines.Reader(lines)
        # ...
        # Add values to loaded_data. 
    except jsonlines.InvalidLineError as err:
        # .. Handle error here.
finally:
    # Work with loaded_data
...