如何在新文件中将Json null值写为空行(将基于Json的日志转换为列格式,即每列一个文件)



日志文件示例:

{"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}}

有人能帮我吗?

注意,输入文件实际上是一个NDJSON。请参阅文档。

话虽如此,由于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}}

最新更新