分析と広告のためのCookie
分析と広告のためにCookieを使っており、どちらもGoogleに送られます。拒否しても、目に見える動作は何も変わりません。プライバシーポリシーを読む
ここで NDJSON を YAML に変換できます。無料、アカウント不要です。ファイルを上の枠に落とせば、数秒で結果がダウンロードできる状態になります。 変換はお使いのブラウザーの中で行われるので、ファイルはアップロードされません。Windows でも macOS でも Linux でも、iPhone でも Android でも同じように動き、通信を切っても動き続けます。
一度に100ファイルまで。フォーマットが混ざっていても構いません。
順番に変換し、まとめてZIPでダウンロードします。
NDJSON から YAML
構造化ログはスタックトレースや SQL 文、リクエスト本文といった長いテキストを一つのフィールドに丸ごと詰め込みます。JSON は改行を \n という二文字でしか表現できないので、数十行のトレースが数千文字の一行として出力され、そのままでは読めません。
YAML には別の書き方があります。改行を含む文字列はブロックスカラーとして書かれ、キーの下に本当の改行を持つ形で表示されます。値そのものは一切変わりませんが、ファイルが読みやすい形になります。読むための書き出しでは、これが JSON より YAML を選ぶ主な理由です。
行区切りのファイルなので、レコードごとに --- で区切られた複数ドキュメントの形を想像するかもしれませんが、実際には全体が一つのドキュメントになり、各レコードがダッシュ付きの項目として並びます。
このサイトでは複数ドキュメントの YAML ストリームを読み込む変換自体を扱っていないため、一つのドキュメントにまとまった形が、そのまま読み込みにも使える形になります。スクリプトの yaml.safe_load はリストを一度に受け取れます。
注文番号のような「00412」という値は、そのまま書くと数値として解釈されてしまいます。書き出しの際は数字だけの文字列や、コロンとスペースを含む値などを引用符で囲むので、先頭のゼロも失われずに残ります。
ただしこれは書き出し側の配慮であって、フォーマット自体が安全という意味ではありません。ファイルを手で編集して引用符を消してしまうと、次に読み込んだときにただの数値に変わってしまいます。
このサイトの書き出しは 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 | |
|---|---|---|
| 正式名称 | Newline-Delimited JSON | YAML Ain't Markup Language |
| 拡張子 | .ndjson, .jsonl | .yaml, .yml |
| メディアタイプ | application/x-ndjson | application/yaml |
| 最初の公開 | 2013 | 2001 |
| 仕様 | — | YAML 1.2 |
| ライセンス | オープン標準 | オープン標準 |
| 現在の位置づけ | 現行 | 現行 |
| ブラウザで開けるか | 対応なし | 対応なし |
| 代わりに検討される形式 | JSON, CSV | JSON, TOML |
失われるものはありません。NDJSON も YAML も中身を劣化なしに保持します。この変換が変えるのは包み方であって品質ではないので、劣化が積み重なる心配をせずに何度でも繰り返せます。
開くプログラムが重なりません。NDJSON はjqとpandasで、YAML はVisual Studio Codeとyqで開きます。結果を渡す相手には後者のどれかが要ります。
YAML は 2001 年から使われています。規定は YAML 1.2 です。Visual Studio Codeとyqがこの形式を読めます。
いいえ。この変換は完全にブラウザーの中で行われるので、ファイルが端末から出ることはありません。ご自分で確かめられます。開発者ツールのネットワークタブを開いて、何か変換してみてください。ページそのものと、このサービスの費用をまかなっている分析・広告のリクエストは見えますが、あなたのファイルを運んでいるリクエストはひとつもありません。
はい。アカウントも透かしもなく、消費される 1 日の割り当てもありません。お使いの機械の上で動くので、何度でも戻ってきていただけます。ブラウザーが扱えるのは 100 MB までのファイルで、一度に 100 本です。
いいえ。YAML は同じ内容を何も捨てずに保持できるので、結果は品質の点で元のファイルと同じです。
失われるものはありません。NDJSON も YAML も中身を劣化なしに保持します。この変換が変えるのは包み方であって品質ではないので、劣化が積み重なる心配をせずに何度でも繰り返せます。