100% ローカル — データがブラウザの外に出ることはありません

propertiesをYAMLに変換|Spring Boot にそのまま置ける

Javaの.propertiesファイルをYAMLに変換します。点で区切ったキーは入れ子になり、添字付きのキーは配列になるので、application.yml としてそのまま置けます。

高速 プライベート Cookieゼロ
インデント

Properties 入力

YAML 出力

このツールの動作

.properties ファイルが YAML になり、点が構造になります。

# サービス
app.name=Demo
app.port=8080
app.debug=true
app:
  name: Demo
  port: 8080
  debug: true

キーと値は = でも : でも区切れます。コメント行は # か ! で始まり、行末が逆斜線なら次の行へ続きます。.properties の逃がし表記、\:、\=、\n、\uXXXX は解かれるので、caf\u00e9 は café として届きます。

添字付きのキーは配列になる

app.hosts[0]=alpha
app.hosts[1]=beta
app:
  hosts:
    - alpha
    - beta

配列を持たないファイルに並びを書くとき、Spring はこう書きます。この場所の YAML から properties への変換が作るのも、この形です。ところが読み取ると hosts[0]、hosts[1] という文字どおりのキーが二つ出てきました。自分の出力を自分で認識できず、往復で並びが失われていたのです。いまは添字が 0 から抜けなく続くとき、並びになります。抜けがある、重なりがある、隣に素の hosts がある。そうした場合はキーをそのまま残します。穴を埋めるために値を動かせば、順序を作り出すことになるからです。

同じキーが二度あれば断る

app.port=8080
app.port=3000
Duplicate key "app.port": it already has a different value

Properties.load は最後の代入を採り、ひと言もありません。最初の値は消えていました。YAML から properties への向きでは、同じ名前に潰れる二つのキーを書くことをすでに拒んでいます。こちらで黙って受け入れていたのは、同じ穴を反対から見た姿でした。まったく同じ行は通ります。繰り返すこと自体は何も語らないからです。

値がどうなるか

  • 数と真偽値には型が付きます。 CSV の道具と同じで、8080 は数、true は真偽値です。
  • 007 は文字列のまま。 1e3 も同じで、文字が値以上のものを運んでいるものはそのままです。
  • 紛らわしいスカラーには引用符。 y、on、NO は YAML 1.2 の読み手には文字列ですが、YAML 1.1 を読む PyYAML には真偽値です。そこだけ引用符で囲めば、二つの読み手の解釈が揃います。
  • 空の値は空の文字列であって、null ではありません。ファイルはキーがあって中身が無いと言っており、YAML もそう言います。

プライバシー

すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

`app.hosts[0]` はどうなりますか。
このページを書いてからは配列になります。添字付きのキーは、Spring が平らなファイルに並びを書くときの書き方で、この場所の YAML から properties への変換もそう書きます。ところが読み取る側は `hosts[0]`、`hosts[1]` という文字どおりのキーを作っていました。自分の出力を自分で認識できていなかったわけです。いまは 0 から始まり抜けの無い添字の並びが YAML の並びになります。それより整っていないものは文字どおりのまま残します。位置を推し量れば値が動いてしまうからです。
なぜ同じキーが二度あると断るのですか。
`Properties.load` は最後のものを採り、何も言いません。最初の値はただ消えていました。逆向きの変換では、同じ名前に潰れる二つのキーを書くことをすでに拒んでいました。読む側が黙って受け入れていたのは、同じ穴を反対から見た姿です。まったく同じ行の繰り返しは何も語らないので、これまでどおり通ります。
なぜ `007` は引用符付きで出るのですか。
文字列のままにするためです。値の型付けは、この場所が CSV を扱うときと同じです。`8080` は数、`true` は真偽値。しかし `007` はゼロに意味のある識別子なので、文字のまま残します。引用符は、YAML 1.1 の読み手が取り違えるものも守ります。`y`、`on`、`NO` はあなたのファイルでは文字列ですが PyYAML には真偽値です。引用符があれば、そのまま自分でいられます。

関連ツール