XMLコメントとJSON変換

JSON変換時にXMLコメントがどのように処理されるかを理解します。コメント構文、コメントが通常破棄される理由、コメントコンテンツを保持するための戦略を解説します。

XML Features

詳細な説明

XMLコメントはドキュメント内のアノテーションであり、データコンテンツの一部ではありません。YAMLコメントと同様に、JSONにはコメント構文がないため、JSON変換時に通常破棄されます。

コメント付きXML:

<config>
  <!-- Database settings -->
  <database>
    <host>localhost</host>        <!-- Primary DB host -->
    <port>5432</port>             <!-- Default PostgreSQL port -->
    <name>myapp_prod</name>
  </database>
  <!-- Cache configuration -->
  <cache>
    <driver>redis</driver>
    <ttl>3600</ttl>               <!-- TTL in seconds -->
  </cache>
</config>

JSONに変換すると(コメント破棄):

{
  "config": {
    "database": {
      "host": "localhost",
      "port": "5432",
      "name": "myapp_prod"
    },
    "cache": {
      "driver": "redis",
      "ttl": "3600"
    }
  }
}

コメントが失われる理由:

  1. JSONにはコメント構文がない。 JSONC(VS Code使用)とは異なり、RFC 8259に準拠した標準JSONはコメントをサポートしていません。
  2. XML DOMパーサーは通常コメントを無視する。 XMLドキュメントがDOMツリーにパースされると、コメントノードはツリーに存在しますがデータ抽出時にスキップされます。
  3. コメントはメタデータであり、データではない。 人間の読者のために意図とコンテキストを説明するものであり、機械処理可能な情報ではありません。

コメントの保持(必要な場合):

戦略1:特殊キー

{
  "database": {
    "_comment": "Database settings",
    "host": "localhost"
  }
}

戦略2:コメント配列

{
  "_comments": ["Database settings", "TODO: Add Redis cluster support"],
  "database": { "host": "localhost" }
}

XMLコメントのルール:

  • コメントは <!-- で始まり --> で終わる
  • コメント本体内に --(ダブルハイフン)は使用できない
  • コメントは要素タグ内に記述できない
  • コメントはルート要素の前後、子要素間のどこにでも配置できる

JSONからXMLに変換する場合、標準的なJSONデータからコメントを生成することはできません。JSONに _comment キーが含まれている場合、スマートなコンバーターはそれらをXMLコメントに変換できますが、これは標準機能ではありません。

ユースケース

コメントが多数含まれるXML設定ファイルをプログラムによる操作のためにJSONに変換し、その後XMLに戻す際に、インラインコメントがラウンドトリップで保持されないことを文書化する場合。

試してみる — JSON ↔ XML Converter

フルツールを開く