如何有效地解码大量小型JSON数据块?

时间:2016-07-14 07:46:04

标签: python json

我要为日志文件编写一个解析器,其中每一行都是一个JSON记录。

我可以解码循环中的每一行:

logs = [json.loads(line) for line in lines]

或者我可以一次解码整个文件:

logs = json.loads('[' + ','.join(lines) + ']')

我想尽量缩短执行时间,请忽略其他因素。是否有理由更喜欢一种方法而不是另一种方法?

2 个答案:

答案 0 :(得分:3)

您可以使用timeit轻松测试它:

$ python -m timeit -s 'import json; lines = ["{\"foo\":\"bar\"}"] * 1000' '[json.loads(line) for line in lines]'
100 loops, best of 3: 2.22 msec per loop
$ python -m timeit -s 'import json; lines = ["{\"foo\":\"bar\"}"] * 1000' "json.loads('[' + ','.join(lines) + ']')"
1000 loops, best of 3: 839 usec per loop

在这种情况下,将数据组合并解析它的速度大约快2.5倍。

答案 1 :(得分:0)

您可以将日志设为JSON字典。 喜欢

{    
"log":{
     "line1":{...}
     "line2":{...}
    ...
    }
}

然后执行this解释如何在Python中将JSON转换并使用到字典

所以你可以直接使用它而无需解析