如何正确使用jq --seq?

时间:2019-11-20 20:14:03

标签: json jq

我用一个非常小的文件测试了“ jq --seq”

jq --seq ".title, .id" test.json

test.json是这样的:

{"title": 3, "id":4}
{"title": 3, "id":4}
{"title": 3, "id":4}

我得到了这个错误。而且jq除了此错误外什么都不输出

ignoring parse error: Unfinished abandoned text at EOF at line 4, column 0

如何正确使用jq --seq?

1 个答案:

答案 0 :(得分:1)

--seq格式要求每个值都以ASCII RS字符(dec 30 / hex 1E)开头

  

使用application/json-seq MIME类型方案在jq的输入和输出中分隔JSON文本。这意味着将在输出的每个值之前打印一个ASCII RS(记录分隔符)字符,并在每个输出之后打印一个ASCII LF(换行)字符。无法解析的输入JSON文本将被忽略(但会发出警告),并丢弃所有后续输入,直到下一个RS。此模式还将解析不带--seq选项的jq的输出。

如果将这些字符添加到文件中,它将起作用。

txt = <<~JSON
\x1e{"title": 1, "id":2}
\x1e{"title": 3, "id":4}
\x1e{"title": 5, "id":6}
JSON

File.write('test.json', txt)

然后

% jq --seq ".title, .id" test.json

1
2
3
4
5
6

但是看起来您根本不需要此选项?取出文件(不带RS字符)并将其馈送到jq ".title, .id" test.json会产生相同的结果。