Command Palette

Search for a command to run...

JSON から TOML: Config ファイルを正しい方法で変換します

JSON から TOML: Config ファイルを正しい方法で変換します

T
Toolz Team
|Sep 13, 2026|17 分読んでください
GoogleでToolz.devを優先します

データツールコレクションの一部

JSON から TOML へのコンバーター

JSONをTOML 1.0 に変換します。 オブジェクトはテーブルになり、オブジェクトの配列はテーブルの配列になり、TOMLが期待する場所ですべてがインラインでレンダリングされます。

JSON から TOML へのコンバーター を使う

TOMLがはじめて噛んだのは構文ではありません 順序付けでした 古いNodeサービスからJSON設定オブジェクトがありました 私はそれをaとして欲しかったのです config.toml rust の書き換えのために、そして私は初めてみんながすることをしました: テーブルを手入力しました 10 分後、パーサーは私が理解できないエラーを投げていて、完全に問題なく見える線の下にある3 つのキーでした [table] その上に属していたヘッダー。 TOML には JSON には属さないルールがあり、一度トリップすると決して忘れられません。

私が造る Toolz.dev、そして私はそこにフォーマットコンバータの長い棚を出荷したので、私は間違いのその全体のカテゴリを削除するためにJSON to TOMLコンバータを書きました.JSONを貼り付け、同じデータに再解析するTOMLを取得し、順序はあなたのために処理されます.このガイドは、私はその日の午後に読んでほしかったものです: TOMLとは何か、JSONとTOMLがどこに同意しないのか、そしてあなたが気にかけているものを失うことなくそれらの間で変換する方法。

tl;dr: TOML は、Cargo、Poetry、Hugo、および多くの Rust and Go ツールで使用される型付き構成形式です。 JSON を TOML に変換するのはほとんどが機械的なことですが、判断が必要なのは 3 つあります。テーブルの順序付け (サブテーブルの前のキー、常に)、オブジェクトの配列の書き方 (テーブルの配列とインライン テーブル)、および JSON に何が起こるか null、どの TOML が表現方法を持たないか。 を JSONからTOMLへのコンバーター 3 つすべてを明示し、ブラウザ内で完全に実行します。

TOML とは何ですか?なぜ JSON をそれに変換するのでしょうか?

TOMLはTom' s Obvious, Minimal Languageの略です 古いINIファイルのように読めますが INIとは違って 入力された値や 一流の日付や 定義された文法を持つ リアル仕様になっています その仕様が勝った理由です 人が一目で読めるコンフィグ形式 毎回同じように機械が解析するかどうか 曖昧さを感じさせません port = 8080 は文字列か数値です. 数値です. TOML がそう言っているからです.

マシンがJSONを与え、ツールがTOMLを望んでいるとき、JSONからTOMLへの変換に手を伸ばします それはあなたが思っているよりも起こります APIは設定ブロブをJSONとして返し、それを必要なものにします pyproject.toml。 おまえは年寄りだ config.json そして、プロジェクトを読み取るスタックに移動しています config.toml。プログラム的にデータを生成しましたが、それが JSON として出力されました JSON.stringify produces, そして消費者は Cargo または Hugo または TOML ライブラリを使用した Go サービスです。いずれの場合もデータは同一です。シリアル化のみが異なります。

逆方向も存在するが、別の仕事である。 逆方向なら、 JSON フォーマッタ 最初に JSON を正気チェックできるようにしておく価値があります JSON から YAML へのコンバータ 他の一般的な構成形式についても説明します。このガイドは、JSON が TOML に移行することに関するものです。

コンバータはどのようにJSONをTOMLにマッピングしますか?

JSON にはほんの一握りの図形しかなく、TOML にはそれぞれホームがあります。マッピングを理解することがツールを理解するための最も重要です。

A JSON オブジェクト TOML 化 表.最上位のオブジェクトはルートテーブルであり、それがコンバータが入力をオブジェクトにすることを主張する理由です。 ネストされたオブジェクトは になります [table] 点線のパスを持つヘッダー、つまり { "database": { "pool": { "max": 10 } } } なる a [database.pool] セクション付き max = 10 その中に.

A JSON オブジェクトの配列 TOML 化 テーブルの配列、ダブルブラケットで書きます [[name]] ヘッダー、要素ごとに1 ブロック これはレコードのリストに対する慣用的なTOMLパターンです: サーバーのリスト、依存関係のリスト、ビルドターゲットのリスト 各要素は独自のものを取得します [[servers]] ブロック.

エブリ スカラー 直接写像する.JSON 文字列は二重引用符で囲まれた TOML 基本文字列になり,制御文字はエスケープされる.JSON 数値は整数であれば TOML 整数になり,それ以外の場合は float になる.JSON ブール値になる. true や false。これらは簡単なケースであり、コンバーターは決して間違えません。

A JSON スカラーの配列 TOMLインライン配列になります: ["admin", "editor"] 滞在 ["admin", "editor"]。 mixed 配列と nested 配列も、それらが適合する唯一の場所であるため、インラインで記述されます。

なぜ、TOMLでは鍵の順序付けがそれほど重要なのでしょうか?

これは全員を捕える規則なので、 はっきり述べる価値があります TOML では、任意のテーブル内で、その table' s 自身のキー/値のペアを、そのサブテーブルヘッダーのいずれかの前に書けば、 [server] ヘッダー、次にいくつかのキー、次にルート テーブルに属する別のキー、パーサーはその迷走キーをの一部として読み込みます [server] 代わりに. best case it lands in the wrong place; worst case the file fails to parse.

JSON にはそのような規則はありません。 JSON では、キーの順序は重要でもなく、オブジェクトとスカラーは同じ中括弧内で自由に混在します。したがって、オブジェクトを挿入順序でウォークし、移動中に各キーを放出する単純な JSON から TOML への変換は、スカラーがネストされたオブジェクトをたどった瞬間に壊れた TOML を生成します。

コンバータはすべてのテーブルを2 回パスすることでこれを解決します まず単純なキーである スカラーとインライン配列をすべて発します その後初めて サブテーブルとテーブルの配列ヘッダーを発し それぞれに再帰します キーの順序は各グループ内に保持されます これはあなたが望むことですが 2 つのグループ間で必要な再配置は自動的に行われるのです 考える必要はなく 私が得たエラーも決して得られません。

オブジェクトの配列はインラインに対してテーブルであるべきですか?

これが1 つの本物の選択です。 TOMLではオブジェクトの配列を2 通りの方法で記述することができ、どちらも有効です。

1つ目は、 テーブルの配列、二重括弧形式。 冗長で読みやすく、レコードごとに1 ブロックあり、野生のほとんどのTOMLがどのようなものか。 aを見たことがあるなら Cargo.toml いくつか と [[bin]] エントリー、これを見ましたね.

[[servers]]
name = "web"
ip = "10.0.0.1"

[[servers]]
name = "api"
ip = "10.0.0.2"

2つ目は、 インラインテーブル 通常のアレイ内で、各オブジェクトを 1 行にパックします。

servers = [
  { name = "web", ip = "10.0.0.1" },
  { name = "api", ip = "10.0.0.2" },
]

どちらも同じデータへの往復です どちらが欲しいかはターゲットと好みによって異なります テーブルの配列は人間が編集するレコードとしてよりよく読み取られ、ほとんどのツーリング構成の規則です インラインテーブルはよりコンパクトで、元のJSONの形状に近いため、リストが短い場合やオブジェクトが小さい場合に好む人もいます コンバータはデフォルトでテーブルの配列に変更され、切り替えるためのトグルが付きます 不明な場合は、デフォルトのままにしておきます。 TOML ファイルは通常どのようなものですか。

TOML の JSON null はどうなりますか?

TOML には null がありません。キーワードも空の値も何もありません。これは形式による意図的な設計決定であり、JSON から TOML への損失が本当に大きい唯一の場所です。

したがって、コンバータは選択をする必要があり、それを実行できます。デフォルトでは、値が であるキー null がドロップされ、ツールはドロップされたキーを出力の下のノートにリストするため、何も静かに消えません。キーを保持したい場合は、空の文字列として null を記述することに切り替えることができます。これにより、キーの種類を変更する代わりにキーが保存されます。どちらも完璧ではありません。完璧な答えはないからです。重要なのは、選択が埋もれているのではなく、目に見えることです。

TOML配列にはnullを全く含められないため、配列内部のNULLは常に警告付きでドロップされます。 JSONに nullがある場合 [1, null, 3]、 TOML なる [1, 3] そして、ツールは、削除したことを示します。これらの null が意味を持っている場合、それは変換後ではなく変換前にデータを再形成する信号です。

なぜ私の数字は小数点を失ったのか、それとも 1 を獲得したのでしょうか?

これはタイプを気にする人を驚かせます JSONは区別しません 5 から 5.0。 両方とも同じ IEEE 754 の倍に、そしてその時までに解析します JSON.parse が行われる 末尾のゼロのトレースはありません だからコンバーターが数を見たとき 5、フロートの意味を知ることはできない、と以来 5 TOML 整数を書き込む整数です。

一方、TOML は整数を float と区別し、いくつかのツールはその違いを気にします。 float として入力された値が必要な場合、修正はソース内でそれに小数部分を与えることです。 、 5.1 や 5.0 生き残る方法で書かれたり、変換後に単一の値を編集したりするために書かれたものです。これは 1 文字の変更であり、まれですが、コンバーターが間違っていると考えるよりも、なぜそれが起こるのかを知る価値があります。それは間違っていません。 JSON は、コンバーターがそれを見る前に情報を単に捨てただけです。

逆の場合は非常に大きな数字または非常に小さな数字で表示されます。JavaScript' s String() のような指数表記を生成します 1e+21。 TOML はそれを float として受け入れるので、 fine に変換しますが、数値の形状は入力したものと異なるように見えるかもしれません。 繰り返しますが、値は同一です。; レンダリングのみが変更されました。

ベアキーとクォーテッドキーはどのように機能しますか?

TOMLでは、文字、数字、アンダースコア、ダッシュだけでできている場合、キーを裸で書き込むことができます それ以外のもの、ドット、スペース、スラッシュ、Unicode文字を持つキーを引用する必要があります コンバータは各キーをチェックし、必要なものだけを引用しますので user-name は裸のままです "user.name" gets quotes to stop the dot being read as a table path.これについて考える必要はありませんが、出力でキーの周りに引用符が表示されている場合、それが理由です: キーには、そうでなければ意味が変わる文字が含まれていました。

実用的な例

ツールがロードするサンプルは次のとおりですので、すべてのルールを一度に確認できます。 JSON:

{
  "title": "Toolz config",
  "version": 2,
  "enabled": true,
  "owner": { "name": "Liton", "roles": ["admin", "editor"] },
  "database": { "host": "localhost", "port": 5432, "pool": { "min": 2, "max": 10 } },
  "servers": [
    { "name": "web", "ip": "10.0.0.1" },
    { "name": "api", "ip": "10.0.0.2" }
  ]
}

ルート スカラーが最初に来る TOML になり、ネストされたオブジェクトは順番に点線のテーブルになり、サーバーの配列は 2 つになります [[servers]] ブロック:

title = "Toolz config"
version = 2
enabled = true

[owner]
name = "Liton"
roles = ["admin", "editor"]

[database]
host = "localhost"
port = 5432

[database.pool]
min = 2
max = 10

[[servers]]
name = "web"
ip = "10.0.0.1"

[[servers]]
name = "api"
ip = "10.0.0.2"

それに注目してください title、 version あんど enabled は任意のヘッダの前に書かれる、 roles 文字列の配列であるため、インライン配列のままです [database.pool] 下に座ります [database] 点線のパスとして このガイドのすべてのルールは9 行の出力で見えます。

どの変換のためのどのツールですか?

TOMLはファミリーの1 つのフォーマットで、正しいツールはどこから始めてどこで終わるかによって決まります。 と考えます。

あなたは持っている あなたが欲しい 使い
json TML config JSON から TOML
json YAML config JSON から YAML へ
ヤムル json YAMLからJSONへ
json シーリング JSON から XML へ
メッシー JSON 読める JSON JSON フォーマッタ

パターンは、config形式が同じデータの交換可能なビューであり、必要なコンバーターは、あなたが行く方向のために名前が付けられているということです。 TOML、YAML、JSONはすべてネストされたキー/値データを表現します; 違いは、ターゲットツールがどちらを読み取るかです。

構成ファイルをオンラインで変換しても安全ですか?

Configファイルは、接続文字列、トークン、その他の秘密が含まれていることが多いため、Webサイトへの貼り付けに注意する必要がある種類のものです。 the JSONからTOMLへのコンバーター 完全にブラウザで実行されます 貼り付けたJSONはデバイス上のメモリで解析され、そこでTOMLが生成され、サーバーに送信されたり、ログに書き込まれたり、保存されたりすることは何もありません これは自分で見ることができます: ネットワークタブを開き、変換を実行し、リクエストが消えないことを確認します また、ページがロードされると接続なしで動作し続けます これは、作業がローカルであることを示す実用的な証拠です データがどこに行くかを気にしていて、コンフィグファイルで行う必要がある場合、これは重要なプロパティです サイト上のすべてのツールの背後にある同じ原理であり、私がそれについて長々とメモに書いた理由 オンライン ツールのデータ プライバシー。

これが実際のワークフローに収まる場所

フォーマット変換がタスク全体になることはめったにありませんステップです APIから設定オブジェクトを引き出し、変換し、プロジェクトにドロップします クライアントサイドコンバーターの価値は、摩擦なしでそのフローにスロットすることです: アップロードなし、アカウントなし、サーバーで待機なし、あなたの秘密がsomeone& #39; sログにあるかどうか疑問に思わないこと それが私が全体を維持するのと同じ理由です Toolz.dev クライアント側を設定します。これは、私が再び取り上げるテーマです 開発者の生産性向上ツール 1 日に 20 回届くツールは、往復 2 秒とプライバシーに関する質問が合計されるツールであるため、書き込みが必要です。

TOML は、最良の方法で退屈することで、そのフロー内での地位を獲得しました。どこでも同じものを解析し、よく読み、その 1 つの鋭いエッジである順序付けルールは、コンバーターがあなたのためにファイルしておくべきものです。 JSON を貼り付け、配列と null の処理方法を選択し、機能する TOML をコピーします。

よくある質問

JSONからTOMLに変換する方法は?

JSON オブジェクトをコンバータに貼り付けて、「変換」をクリックします。このツールは、オブジェクトを TOML テーブルに、オブジェクトの配列をテーブルの配列に、その他すべての値をインラインでシリアル化し、コピーする標準の TOML を提供します。 TOML ドキュメントは常にテーブルであるため、トップレベルの JSON はオブジェクトである必要があります。

TOMLは何に使用されますか?

TOML は、読みやすく、明確に解析できるように設計された構成ファイル形式です。 Rust's Cargo (Cargo.toml)、Python パッケージング (pyproject.toml)、Hugo、および多くの Go および Rust ツールの構成形式です。人々は JSON を TOML に変換して、マシンで生成された構成を TOML を期待するツールに渡します。

TOML の JSON null 値はどうなりますか?

TOML には null 型がないため、JSON null を直接表現することはできません。デフォルトでは、このコンバータは null キーを削除し、それらをリストするノートを追加します。代わりに、空の文字列として記述するように切り替えることができます。TOML 配列には null が含まれないため、配列内の Null は常に削除されます。

テーブルの配列とインラインテーブルの違いは何ですか?

テーブルの配列は、レコードごとに 1 ブロックずつ、ダブルブラケット ヘッダーを繰り返す方法を使用します。これは、サーバーや依存関係のリストなどのオブジェクトのリストを書き込む慣用的な TOML の方法です。インライン テーブルは、キーのセットとしてオブジェクトを 1 行にパックします。キーは中括弧内の値のペアに等しくなります。このツールはデフォルトでテーブルの配列ですが、代わりにインラインを選択できます。

なぜ私のJSON番号5.0 はTOMLで5 になったのですか?

JSON は 5 と 5.0 の差を保存しないので、解析は両方を数字の 5 として読みます。 5 は整数であるため、コンバータはそれを TOML 整数として書き込みます。 float として入力する必要がある場合は、ソースに小数部分を追加するか、変換後に単一の値を編集します。

コンバーターはキーの順序を維持しますか?

はい。キーは JSON に表示される順序で発行され、必要な再配置が 1 つあります。各テーブル内では、プレーン キーはサブテーブルまたはテーブル配列ヘッダーの前に書き込まれます。これは TOML 構文規則であり、並べ替えの選択ではなく、それがなければファイルは解析されません。

私の JSON はサーバーにアップロードされていますか?

いいえ 変換全体は、プレーンな JavaScript を使用してブラウザで行われます。 config ファイル内のシークレットや資格情報を含む JSON は、送信、ログ記録、または保存されることはなく、ページがロードされるとコンバータは接続なしで動作し続けます。

なぜトップレベルはオブジェクトでなければならないと書かれているのでしょうか?

TOML ドキュメントはテーブルとして定義されます。つまり、キー/値のペアのセットから開始する必要があります。裸の JSON 配列またはスカラーにはマッピングするテーブルがありません。たとえば、名前付きキーの下に配列を置くなど、最初にオブジェクトにドキュメントをラップすると、変換されます。

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!