NDJSON を YAML に変換

ここで NDJSON を YAML に変換できます。無料、アカウント不要です。ファイルを上の枠に落とせば、数秒で結果がダウンロードできる状態になります。 変換はお使いのブラウザーの中で行われるので、ファイルはアップロードされません。Windows でも macOS でも Linux でも、iPhone でも Android でも同じように動き、通信を切っても動き続けます。

  • 処理される場所 ブラウザーの中です。ファイルがアップロードされることはありません。
  • 可逆 何も捨てられません。YAMLはNDJSONが持っていたものをそのまま保持します。
  • ファイルサイズの上限 1ファイルあたり100MBまで。無料、アカウント不要です。

一度に100ファイルまで。フォーマットが混ざっていても構いません。

一行にまとまったスタックトレースが読めなくなる理由

構造化ログはスタックトレースや SQL 文、リクエスト本文といった長いテキストを一つのフィールドに丸ごと詰め込みます。JSON は改行を \n という二文字でしか表現できないので、数十行のトレースが数千文字の一行として出力され、そのままでは読めません。

YAML には別の書き方があります。改行を含む文字列はブロックスカラーとして書かれ、キーの下に本当の改行を持つ形で表示されます。値そのものは一切変わりませんが、ファイルが読みやすい形になります。読むための書き出しでは、これが JSON より YAML を選ぶ主な理由です。

出力は一つの YAML ドキュメントの中の一覧

行区切りのファイルなので、レコードごとに --- で区切られた複数ドキュメントの形を想像するかもしれませんが、実際には全体が一つのドキュメントになり、各レコードがダッシュ付きの項目として並びます。

このサイトでは複数ドキュメントの YAML ストリームを読み込む変換自体を扱っていないため、一つのドキュメントにまとまった形が、そのまま読み込みにも使える形になります。スクリプトの yaml.safe_load はリストを一度に受け取れます。

数字に見える文字列は引用符で守られる

注文番号のような「00412」という値は、そのまま書くと数値として解釈されてしまいます。書き出しの際は数字だけの文字列や、コロンとスペースを含む値などを引用符で囲むので、先頭のゼロも失われずに残ります。

ただしこれは書き出し側の配慮であって、フォーマット自体が安全という意味ではありません。ファイルを手で編集して引用符を消してしまうと、次に読み込んだときにただの数値に変わってしまいます。

YAML 1.1 の読み込みでは NO が真偽値になる

このサイトの書き出しは YAML 1.2 に沿っていて、真偽値は true と false だけです。NO や yes、on、off はただの文字列として扱われ、引用符なしで正しく出力されます。

ただし PyYAML や Ruby の Psych、一部の古い Go 実装は YAML 1.1 の解釈をするため、同じ NO が真偽値の false として読み込まれます。国コードの列に NO が含まれるログを、それらのパーサーで読む予定があるなら注意が必要です。

入れ子構造はそのまま保たれる

CSV や TSV、XLSX、SQL、Parquet といった表形式の変換先はすべて、入れ子になったオブジェクトを request.method のようなドット区切りの列名に平坦化します。ここではその処理は一切行われません。

四階層深いオブジェクトはそのまま四階層深くインデントされ、配列はダッシュ付きの一覧になります。レコードごとに持っているフィールドが違っていても、そのまま違う形で出力されます。ログの一部分を読みたいときには、これがそのまま欲しい形です。

長い一行の値は折り返される

改行は含まないものの長さのある値、たとえば長いクエリー文字列付きの URL などは、およそ 80 文字あたりで折り返されて次の行に続きます。YAML では折り畳まれたプレーンスカラーの改行はスペースとして扱われるため、読み込んだときの値は変わりません。

ファイルを見た目のまま流用したい場合には注意が必要です。値を正確に取り出したいときは、読み込んだ構造から取得するか、JSON の変換を使うほうが確実です。

コメントは何も付いていない

書き出された YAML には注釈が一切ありません。ソースの NDJSON にコメントを保持する仕組みがそもそもないためです。

一度読んで捨てるファイルであればこれで問題ありませんが、リポジトリにコミットするつもりなら、どのシステムが出力したものか、いつ取得したものかを、先頭に数行書き加えておく価値があります。

空行と壊れた行の扱い

空行は読み飛ばされ、ほとんどの書き出しツールが残す末尾の改行も無視されるので、レコード数は空でない行の数と一致します。JSON として解釈できない行があると、そこで変換が止まり、行番号とともにエラーが表示されます。

途中で落ちたプロセスが書いたログの最後の行は、書きかけのまま終わっていることがよくあります。行番号が分かれば、その行を救う価値があるかどうかを判断できます。

どこで処理され、どのくらいの量まで現実的か

ファイルの読み込みも書き出しも、このページの中で、あなたのブラウザーの JavaScript が行います。エンジンのダウンロードもアカウント登録も不要で、変換中のネットワークタブを見れば送信が発生していないことが確認できます。

無料枠は 100 MB までで、ファイル全体が一度メモリーに読み込まれるため、実質的な上限はブラウザータブの側にあります。数万件を人が読むことはまずないので、jq などで先に絞り込んでから変換するのが現実的です。

NDJSON を YAML に変換する手順

  1. お手元の NDJSON ファイル をこのページに落とすか、押してファイルを選んでください。
  2. 変換先に YAML を選びます。変換はブラウザーの中で行われ、ファイルはアップロードされません。
  3. できあがった YAML ファイル をダウンロードします。

NDJSON と YAML——何が変わるか

NDJSONとYAMLの比較
NDJSONYAML
正式名称Newline-Delimited JSONYAML Ain't Markup Language
拡張子.ndjson, .jsonl.yaml, .yml
メディアタイプapplication/x-ndjsonapplication/yaml
最初の公開20132001
仕様YAML 1.2
ライセンスオープン標準オープン標準
現在の位置づけ現行現行
ブラウザで開けるか対応なし対応なし
代わりに検討される形式JSON, CSVJSON, TOML

残るもの

失われるものはありません。NDJSON も YAML も中身を劣化なしに保持します。この変換が変えるのは包み方であって品質ではないので、劣化が積み重なる心配をせずに何度でも繰り返せます。

結果を開く

開くプログラムが重なりません。NDJSON はjqとpandasで、YAML はVisual Studio Codeとyqで開きます。結果を渡す相手には後者のどれかが要ります。

どちらの形式が何のためのものか

YAML は 2001 年から使われています。規定は YAML 1.2 です。Visual Studio Codeとyqがこの形式を読めます。

NDJSON から YAML:よくある質問

NDJSON ファイル はどこかにアップロードされますか。

いいえ。この変換は完全にブラウザーの中で行われるので、ファイルが端末から出ることはありません。ご自分で確かめられます。開発者ツールのネットワークタブを開いて、何か変換してみてください。ページそのものと、このサービスの費用をまかなっている分析・広告のリクエストは見えますが、あなたのファイルを運んでいるリクエストはひとつもありません。

NDJSON から YAML への変換は無料ですか。

はい。アカウントも透かしもなく、消費される 1 日の割り当てもありません。お使いの機械の上で動くので、何度でも戻ってきていただけます。ブラウザーが扱えるのは 100 MB までのファイルで、一度に 100 本です。

NDJSON を YAML に変換すると品質は落ちますか。

いいえ。YAML は同じ内容を何も捨てずに保持できるので、結果は品質の点で元のファイルと同じです。

NDJSON から YAML への変換は可逆ですか。

失われるものはありません。NDJSON も YAML も中身を劣化なしに保持します。この変換が変えるのは包み方であって品質ではないので、劣化が積み重なる心配をせずに何度でも繰り返せます。

これらのフォーマットについて