日志文件示例:
{"timestamp": "2022-01-14T00:12:21.000", "Field1": 10, "Field_Doc": {"f1": 0}}
{"timestamp": "2022-01-18T00:15:51.000", "Field_Doc": {"f1": 0, "f2": 1.7, "f3": 2}}
它将生成5个文件:
1.时间戳.列
2.字段1.列
3.Field_Doc.f1.列
4.Field_Doc.f2.列
5.Field_Doc.f3.列
时间戳的示例内容。列:
2022-01-14T00:12:21.000
2022-01-18T00:15:51.000
当键的值为null时,我面临一个问题,未定义,例如当值us为null时:
{"timestamp": "2022-01-14T00:12:21.000", "Field1": null, "Field_Doc": {"f1": undefined}}
有人能帮我吗?
话虽如此,由于furas已经给出了如何处理NDJSON日志文件的极好答案,我将跳过这一部分。请注意,这里有一个处理NDJSON文件的库。请参见PyPI。
他的代码需要最小的调整来处理undefined
边缘情况。null
值是一个有效的JSON值,所以他的代码不会破坏它。
您可以在执行json.loads()
时通过string.replace()
轻松修复此问题,使其成为有效的JSON,然后您可以在编写value == None
时检查是否用空字符串替换该值。注意,None
是JSON的null
的python等价物。
请注意,替换函数中包含了:
,这是为了防止假阴性。。。
主回路逻辑
for line in file_obj:
# the replace function makes it valid JSON
data = json.loads(line.replace(': undefined', ': null'))
print(data)
process_dict(data, write_func)
write_func((函数调整
def write_func(key, value):
with open(key + '.column', "a") as f:
# if the value == None, make it an empty string.
if value == None:
value = ''
f.write(str(value) + "n")
我使用以下内容作为输入字符串:
{"timestamp": "2022-01-14T00:12:21.000", "Field1": 10, "Field_Doc": {"f1": 0}}
{"timestamp": "2022-01-18T00:15:51.000", "Field_Doc": {"f1": 0, "f2": 1.7, "f3": 2}}
{"timestamp": "2022-01-14T00:12:21.000", "Field1": null, "Field_Doc": {"f1": undefined}}