读取多行json数组时,`dask.bag` JSONDecodeError

时间:2017-07-03 15:40:10

标签: python json dask

当使用dask.bag读取json文件时,当文件中的json为多行时,我得到JSONDecodeError

import json
import dask.bag as db

db.read_text('single-line.json').map(json.loads).compute()
[[{'a': 'b'}, {'c': 'd'}]]    

db.read_text('multi-line.json').map(json.loads).compute()
JSONDecodeError: Expecting value: line 2 column 1 (char 2)

以下是示例文件:

单行

[{"a": "b"}, {"c": "d"}]

多线

[
    {"a": "b"},
    {"c": "d"}
]

这是一个错误还是我缺少的东西?

另外值得注意的是,我只能使用标准的lib

来读取多行文件
with open('multi-line.json') as f:
    data = f.read()
    print(json.loads(data))

[{'a': 'b'}, {'c': 'd'}]

1 个答案:

答案 0 :(得分:1)

read_text函数将文件的每一行解释为单独的元素。所以你的包的元素如下所示:

['[', '{"a": "b"}', '{"c": "d"}', ']']

在其中一些元素上调用json.loads将失败。我怀疑如果您的数据是JSON行分隔的,那么您会有更好的时间。如果您有许多这样的json文件,那么您也可以使用dask.delayed进行并行化。