これらのデータ形式とは?

プログラムは、設定、レコード、リストなどの構造化データを、それぞれ独自の方法で記述するテキスト形式で保存・交換します。あるプログラムが出力した形式を別のプログラムが読み込めない場合や、目的に応じて読みやすく編集しやすい形式にしたい場合に、コンバーターが役立ちます。

形式 データの記述方法 使用例
JSON 波括弧でオブジェクト、角括弧でリストを囲み、テキストを二重引用符で囲む Web APIやアプリの設定
YAML インデントしたkey: valueの行。リスト項目は-で始まる Docker Compose、Kubernetes、CIパイプラインのファイル
XML 属性を持つこともできるタグで要素を囲む ドキュメント、RSSフィード、SOAP Webサービス
TOML [table]ヘッダーの下にkey = valueの行を記述 Cargo.tomlやpyproject.tomlなどの設定ファイル
TOON インデントした行。レコードのリストはフィールドの下に行として記述 AI言語モデルに送信する構造化データ
CSV ヘッダー行の後にレコードごとに1行ずつ記述し、値をカンマで区切る スプレッドシート、データベースのエクスポート
TSV CSVと同様だが、値をタブで区切る スプレッドシートからコピーしたセル
MessagePack ここでは16進数のバイト列で表すバイナリデータ プログラム間でやり取りするコンパクトなメッセージ
JSON5 コメント、単一引用符、引用符なしのキーも使えるJSON 手書きの設定ファイル
JSONL 1行に1つのJSON値を記述する形式。JSON LinesまたはNDJSONとも呼ばれる ログ、データセット
INI [section]ヘッダーの下にkey = valueの行を記述 php.iniなどのプログラム設定ファイル
Properties ドット区切りのキーを使ったkey = valueの行 Spring Bootのapplication.propertiesファイルなどのJavaアプリ

ツールの説明

このツールでは、JSON、YAML、XML、TOML、TOON、CSV、TSV、MessagePack、JSON5、JSONL、INI、Java propertiesの12種類の形式間でデータを変換できます。ここにあるデータ形式コンバーターは、汎用のデータ形式コンバーターも、JSONからYAML、CSVからJSON、XMLからJSONなど、形式の組み合わせごとのコンバーターも、すべて同じように動作します。ツール名にある形式が最初に選択されており、「ソース」と「ターゲット」のメニューから別の形式に切り替えられます。データを貼り付けるか入力すると、構文ハイライト付きのコードエディターに結果が入力と同時に表示され、コピーできる状態になります。入れ替えボタンを押すと変換方向が逆になり、結果が新しい入力になります。

入力がソース形式として無効な場合、エラーメッセージに問題の内容が表示されます。通常は問題の行と列も示されます。

データはブラウザー内で変換され、アップロードされることはありません。

例

このJSONは、

{
  "users": [
    { "id": 1, "name": "Ann", "admin": true },
    { "id": 2, "name": "Bo", "admin": false }
  ]
}

次のYAMLになります。

users:
  - id: 1
    name: Ann
    admin: true
  - id: 2
    name: Bo
    admin: false

ユーザーごとに1行となる次のCSV、

id,name,admin
1,Ann,true
2,Bo,false

および次のTOONにも変換されます。

users[2]{id,name,admin}:
  1,Ann,true
  2,Bo,false

形式間の対応

形式によって保持できるデータの種類は異なるため、変換には次のルールが適用されます。

  • CSVとTSVは表形式のデータを保持します。最初の行が列名になり、それ以降の各行はオブジェクトになります。ネストされたオブジェクトはパスを含む列名になり、リストはセル内のJSONテキストになります。そのため、{"name": "Ann", "address": {"city": "Oslo"}, "tags": ["a", "b"]}は、name、address.city、tagsの列になります。変換して戻すと、これらの列は再びネストされたオブジェクトとリストになります。{"users": [...]}のように1つのリストを持つオブジェクトの場合、行はそのリストの項目になります。また、リストのリストはヘッダーなしの行になります。
  • テキスト値:CSV、TSV、XML、INI、propertiesが保持できるのはテキストのみです。そのため、コンバーターはtrueとfalseを真偽値に変換し、42や3.5のように通常の形式で書かれた数値を数値に変換します。007、1.50、1e3などの値はテキストのままなので、郵便番号やバージョン番号の表記はそのまま保たれます。
  • XMLの属性は@で始まるキーになり、属性を持つ要素のテキストは#textになります。<price currency="USD">44.95</price>は{"@currency": "USD", "#text": 44.95}になります。同じ名前の要素が繰り返される場合はリストになります。XMLに変換すると、@で始まるキーは再び属性になります。値がリストではない単一のキーを持つオブジェクトは、ルート要素になります。それ以外のデータは<root>要素の中に入り、最上位のリストの各項目は<item>要素になります。スペースなど、XML名に使用できない文字は_になります。
  • TOML、INI、propertiesで保持できるのは、最上位にある名前付きの値のみです。そのため、リスト形式のデータはitemsという名前の下に、単一の値はvalueという名前の下に記述されます。TOMLにはnullがないため、null値は省略されます。
  • INIでは、ネストされたオブジェクトは[server.ssl]のようなセクションとして、値のリストはkey[] = valueの行として、オブジェクトのリストは[users.0]のように位置を示す名前のセクションとして記述されます。
  • Propertiesでは、ネストされた名前をドットでつなぎ、リスト項目をapp.hosts[0]のように角括弧内の番号で表します。これはSpring Bootの記述方法に準じています。YAMLまたはJSONに変換すると、これらのキーはネストされたオブジェクトとリストになります。そのため、application.propertiesファイルはapplication.ymlファイルと同じ構造に変換されます。Latin-1以外の文字は\uエスケープで記述されます。
  • YAMLへの変換結果では、YAML 1.1のパーサーが別の値として解釈するテキスト(on、yes、日付など)は引用符で囲まれます。これにより、YAML 1.1とYAML 1.2のどちらのパーサーでも同じデータが得られます。---で区切られた複数のドキュメントを含むYAMLファイルは、それらを要素とするリストになります。また、<<マージキーも展開されます。
  • MessagePackはバイナリ形式のため、ツールでは16進数のバイト列として読み書きします。{"a": 1}は81 A1 61 01になります。入力にはスペースやカンマを含めることができ、各バイトの前に0xを付けることもできます。複数のメッセージを連続して入力すると、リストになります。
  • JSONLへの変換結果では、リストの各項目がそれぞれ別の行になります。
  • 64ビットIDのようにJavaScriptの数値で正確に表せない整数も、すべての桁が保持されます。
  • TOMLの日付と時刻、およびMessagePackのタイムスタンプは、1979-05-27T07:32:00Zのようなテキストになります。

ヒント

  • スプレッドシートのセルを変換するには、セルをコピーしてTSVとして貼り付けてください。スプレッドシートアプリでは、セルはタブ区切りテキストとしてコピーされます。
  • CSVとTSVは、似た形式のレコードを並べたリストに適しています。深くネストされたデータは、YAML、TOML、TOONのほうが読みやすくなります。
  • YAML、XML、TOML、JSON5、INI、propertiesファイル内のコメントは保持されません。コンバーターが引き継ぐのはデータのみです。