Plistの整数型と実数型のJSON変換

Apple plistのinteger(整数)とreal(浮動小数点)要素がどのようにJSON数値に変換されるか、また逆変換時の型推論の仕組みを理解します。

Basic Types

詳細な説明

Plistの数値型

Apple plistは2つの数値型を区別します:整数用の<integer>と浮動小数点値用の<real>。JSONは両方に対して単一のnumber型を持ちます。

Plistの例

<dict>
  <key>MaxRetries</key>
  <integer>5</integer>
  <key>Timeout</key>
  <real>30.5</real>
  <key>Version</key>
  <integer>3</integer>
  <key>ScaleFactor</key>
  <real>2.0</real>
</dict>

JSON出力

{
  "MaxRetries": 5,
  "Timeout": 30.5,
  "Version": 3,
  "ScaleFactor": 2
}

逆変換時の型推論

JSONからplistに変換する際、ツールはNumber.isInteger()を使用して<integer><real>を判別します。JavaScriptが2(整数)として評価するJSON値2.0<integer>2</integer>になります。<real>2.0</real>が必要な場合は、出力を手動で調整する必要があります。

大きな数値

Plistの<integer>は64ビット符号付き整数(最大9,223,372,036,854,775,807)をサポートしています。JSONの数値はIEEE 754倍精度浮動小数点で、2^53までの整数を安全に表現します。非常に大きな整数では変換時に精度の損失が発生する可能性があります。

ユースケース

整数カウント(リトライ回数、ポート番号)と浮動小数点値(タイムアウト、スケールファクター)が混在するmacOSアプリケーション設定をJSONベースの設定システムに移行する際に不可欠です。

試してみる — Plist ↔ JSON Converter

フルツールを開く