我有一串 json 数据,虽然有时它是“常规”json,有时数据是 json-lines 格式。这是我正在测试以查看它是哪种格式的当前方式:
json_newlines = all([_line.strip()[-1].endswith((']', '}')) for _line in file_data.split('\n') if _line.strip()])
有没有更好的方法来做到这一点,或者上面的方法似乎是个好方法?
我有一串 json 数据,虽然有时它是“常规”json,有时数据是 json-lines 格式。这是我正在测试以查看它是哪种格式的当前方式:
json_newlines = all([_line.strip()[-1].endswith((']', '}')) for _line in file_data.split('\n') if _line.strip()])
有没有更好的方法来做到这一点,或者上面的方法似乎是个好方法?
您可以使用内置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