什么是JSON Lines?

JSON Lines(jsonlines、jsonl或ndjson)是一种文本格式,用于存储每行一个JSON的结构化数据。它适用于unix风格的文本处理工具和shell管道,是一个很好的日志文件格式,也灵活运用在协作进程之间传递消息。

  • UTF-8编码;
  • 每一行都是有效的JSON值;
  • 行分隔符是 \n\r\n
  • 建议文件扩展名 .jsonl
  • 建议使用gzip或bzip2压缩器节省空间,生成.jsonl.gz.jsonl.bz2 压缩文件。

JSON Lines 示例

1. 比CSV格式丰富

["Name", "Session", "Score", "Completed"]
["Gilbert", "2013", 24, true]
["Alexa", "2013", 29, true]
["May", "2012B", 14, false]
["Deloise", "2012A", 19, true] 
相比CSV格式,JSON Lines可以干净利落地处理表格数据,没有歧义。 单元格可以使用标准JSON类型。

2. 简易嵌套数据

{"name": "Gilbert", "wins": [["straight", "7♣"], ["one pair", "10♥"]]}
{"name": "Alexa", "wins": [["two pair", "4♠"], ["two pair", "9♠"]]}
{"name": "May", "wins": []}
{"name": "Deloise", "wins": [["three of a kind", "5♣"]]}

JSON Lines最大的优势在于处理大量类似的嵌套数据结构。一个 .jsonl 文件目录比XML文件目录更容易使用。

Python 读写 JSON Lines

1. 安装 jsonlines

pip install jsonlines
支持的Python版本是3.3+和Python 2.7。

2. 读取 jsonl 文件

import jsonlines
with jsonlines.open('input.jsonl') as reader:
    for obj in reader:
        # do something
        print(obj)
jsonlines.open() 方法接受一个文件名并返回一个Reader,实现 Python 读取 JSON Lines格式文件。

3. 写入 jsonl 文件

import jsonlines
with jsonlines.open('output.jsonl', mode='w') as writer:
    writer.write("json数组或对象")
jsonlines.open() 方法同时接受mode='w' 参数并返回一个Writer,实现 Python 向 JSON Lines格式文件写入内容。