/
781.txt
53 lines (38 loc) · 2.74 KB
/
781.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
[1] [[改行]]区切りの [[JSON]] 値の列が [[JSON]] によって表現可能なデータの交換に使われることがあります。
* 構文
[2] 0個以上の [[JSON]] 値を[[改行]]で区切ります。
[FIG(railroad)[
= ?
== [[JSON]] 値
== *
=== [[改行]]
=== [[JSON]] 値
]FIG]
[3] 連続した[[改行]] (= [[空行]]) やファイル末尾の[[改行]]をどう解釈するかは、実装によります。
[4] [[改行]]が [[LF]] か [[CRLF]] か、いずれでもよいかは実装によります。
[5] [[JSON]] 値には[[字句]]間の[[空白]]として[[改行]]を含めることも本来は可能ですが、
本形式では使用しません。これにより、1行 = 1 [[JSON]] 値となり、処理しやすくなります。
;; [6] [[JSON]] 値における[[空白]]は[[人間]]の可読性の向上以外に意味を持たないので、
情報交換用には不要です。なお[[文字列]]中の[[改行]]は [[JSON]] 値内では必ず[[エスケープ]]が必要なので、
元々[[改行]]そのままの形で現れることはありません。
(ですから、[[改行]]が含まれる [[JSON]] 値から何も考えずに[[改行]]を除去すれば、
ここで使える[[JSON]]値となります。)
;; [7] [[JSON]] 値内部の[[改行]]をそのままにしても、意図通り[[構文解析]]することは可能ではあります。
行指向の処理はできなくなりますが、[[JSON]]値の終わりが現れる行までを読み込んで1つの
[[JSON]]値として処理するだけです。
* 実装
[10] [[jq]] は、結果が複数の [[JSON]] 値となるとき[[改行]]区切りで出力します。
ただし、標準では [[JSON]] 値に[[改行]]を含む[[空白]]を入れて[[人間]]が見やすい形にします。
[CODE[-c]] / [CODE[--compact-output]] オプションを指定すると、[[空白]]のない、
本項の形式となります。
[11] その他次の実装が[[改行]]区切りの [[JSON]] 値列を使っています。
[REFS[
- [12] [CITE[Bulk API]] ([TIME[2015-03-13 07:33:24 +09:00]] 版) <http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html>
]REFS]
* 関連
[8] [[JSON]] 値の列全体を [[JSON]] [[配列]]とすることも可能ですが、
末尾まで読み終えてから処理するのでない ([[ストリーミング]]処理したい)
場合に扱いづらいのが問題です。ストリーミング形式で構文解析することも可能で、
そのような実装も存在はしますが、本方式の方がずっと簡単に実現できます。
[9] [[JSON text sequences]] は本方式から派生したもののようですが、
特殊な[[制御文字]]を使っています。