TSV を NDJSON に変換

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

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

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

ドキュメントストアが実際に求める形式

検索エンジンやドキュメントストアは、タブ区切りのファイルをそのままでは受け付けません。Elasticsearch や OpenSearch の一括登録エンドポイントは改行区切りの JSON を読み取り、MongoDB の取り込みツールは既定で1行1つの JSON 文書を読み取ります。BigQuery にも同じ形式専用の読み込みモードがあります。

これは表を文書に変える作業でもあります。1行は表の中の位置であることをやめ、フィールド名を自分で持つ独立したオブジェクトになります。他の文書と異なるフィールド構成であっても、そのまま格納できます。

1行1文書、配列の括弧はない

出力は完全な JSON オブジェクトが1行ごとに並んだもので、先頭の角括弧も、区切りのカンマも、末尾の角括弧もありません。この「何もない」ことこそがこの形式の本質です。読み込み側は1行読み、処理し、忘れて次に進めます。

そのため、このファイル全体は正しい JSON にはなりません。配列を期待するパーサーは2行目で失敗します。これは欠陥ではなく、メモリーの限られた処理が数億行のファイルを読み込めるようにするための性質です。

ヘッダーの名前がそのままフィールド名になる

ヘッダー行の値がそのままフィールド名として使われます。スペースや記号もそのまま残るため、送り先のシステムによっては受け付けない場合があります。

Elasticsearch や MongoDB のドット記法では、フィールド名に含まれるピリオドがパスの区切りとして解釈されます。BigQuery はフィールド名が文字またはアンダースコアで始まり、英数字とアンダースコアだけで構成されていることを要求します。変換前に元のヘッダー行を直しておくほうが、後で大量の文書を直すより簡単です。

型はどのように推測されるか

TSV には型がないため、変換のたびに推測が行われます。数値として読める値は数値に、trueとfalseは真偽値に、空欄はnullになり、それ以外はすべて文字列として扱われます。

この推測が問題になるのは識別子です。00123のような値は数値の123になり、先頭のゼロが失われます。数値化してほしくない列は、変換前に文字として明示しておくか、変換後に元に戻す作業が必要です。

一括登録のアクション行はこの出力にはない

出力に含まれるのは文書だけです。Elasticsearch や OpenSearch の一括登録エンドポイントは、各文書の前にどの操作を行うかを示す小さなメタデータの行を必要としますが、この変換はそれを書き出しません。

この行を挿入する処理を1回はさむ必要があります。それ以外の読み込み先——MongoDB の取り込みツールや BigQuery の読み込みジョブ——は、この出力をそのまま受け取れます。

自由記述のテキストはそのまま安全に残る

検索対象になるのはたいてい扱いにくい列——商品の説明文や記事本文、レビューのテキストです。タブ区切りの表では、こうした値がまさに問題を起こす原因になります。貼り付けられたタブが列を増やし、改行が行を途中で終わらせます。

JSONではこれらは単なる文字列の中身として扱われます。タブは\t、改行は\nとしてエスケープされ、構造を壊すことはありません。検索用のテキストが、そのまま安全に運ばれるのはこのためです。

nullと欠けているフィールドの扱い

空の欄はnullとして書き出されます。ヘッダーより多い列を持つ行があっても、余分な列に名前が作られることはなく、その行だけに特別な扱いが記録されます。

これはマッピングに影響します。最初の数千件がnullで、その後に数値が現れる列は、たまたま最初に見た値によって型が決まってしまうことがあります。取り込み前にマッピングを明示しておくと安全です。

この変換はエクスポート先を選ばず、送信もしない

タブ区切りの読み取りと JSON の書き出しは、どちらもこのページに読み込まれた JavaScript が行います。ファイルがどこかへ送信されることはありません。

無料枠の上限は1ファイルあたり100MB、一度に100ファイルまでです。ファイル全体がメモリー上に構築されてから書き出されるため、数十メガバイト程度であれば余裕がありますが、上限に近いサイズではブラウザーのタブに負荷がかかります。それを超える規模であれば、ストリーミングで処理するスクリプトのほうが適しています。

TSV を NDJSON に変換する手順

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

TSV と NDJSON——何が変わるか

TSVとNDJSONの比較
TSVNDJSON
正式名称Tab-Separated ValuesNewline-Delimited JSON
拡張子.tsv, .tab.ndjson, .jsonl
メディアタイプtext/tab-separated-valuesapplication/x-ndjson
最初の公開19932013
仕様IANA text/tab-separated-values
ライセンスオープン標準オープン標準
現在の位置づけ現行現行
ブラウザで開けるか対応なし対応なし
代わりに検討される形式CSV, JSONJSON, CSV

残るもの

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

結果を開く

pandasは TSV と NDJSON のどちらも読めるので、別のプログラムを開かずに、結果を元のファイルと並べて確かめられます。

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

TSV は 1993 年に登場しました。 IANA text/tab-separated-values で規定されています。ファイルが、それを書いた道具より長く生きなければならないなら、この一点には値打ちがあります。

NDJSON は 2013 年から使われています。jqとpandasがこの形式を読めます。

TSV は 1993 年、NDJSON は 2013 年に登場しました。人に渡すならたいてい古いほうが安全で、新しいほうは同じ仕事をより少ないバイト数で片づけます。

TSV から NDJSON:よくある質問

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

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

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

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

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

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

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

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

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