9 ポイント 投稿者 GN⁺ 2024-12-09 | 2件のコメント | WhatsAppで共有
  • JSON5はJSONファイル形式を拡張し、人間が直接記述・保守しやすくした形式
    • マシン間通信の用途には使用されない
    • 2012年に始まり、2022年時点で週6,500万回以上ダウンロードされ、npmで最も多く依存されているパッケージの上位0.1%に属する
    • Chromium、Next.js、Babel、Retool、WebStormなどの主要プロジェクトで採用されている
    • macOSやiOSなどのAppleプラットフォームで標準サポートされている
  • JSON5の特徴
    • JSONのスーパーセットであり、ECMAScript 5.1の一部構文を含む
    • JSON5ファイルは常に有効なES5ファイルである
  • 拡張されたECMAScript 5.1の機能
    • オブジェクト
      • オブジェクトキーにはECMAScript 5.1のIdentifierNameを使用できる
      • オブジェクトでは単一の末尾カンマを許可する
    • 配列
      • 配列では単一の末尾カンマを許可する
    • 文字列
      • 文字列はシングルクォートで囲める
      • 改行文字をエスケープすることで複数行にまたがることができる
      • 文字エスケープを含めることができる
    • 数値
      • 16進数で表現できる
      • 先頭または末尾に小数点を持てる
      • IEEE 754の正の無限大、負の無限大、NaNを含めることができる
      • 明示的なプラス記号で始めることができる
    • コメント
      • 単一行および複数行コメントを許可する
    • 空白
      • 追加の空白文字を許可する
  • API
    • JSON5.parse(): JSON5文字列をパースしてJavaScriptの値またはオブジェクトを生成する
    • JSON5.stringify(): JavaScriptの値をJSON5文字列に変換する
  • CLI
    • JSON5をJSONに変換したり、JSON5ドキュメントの構文を検証したりするCLIを提供する
  • ECMAScript互換性
    • JSON5はES5と完全に互換になるよう設計されているが、U+2028およびU+2029文字はES5では許可されていない
    • ES2019でこれらの文字が許可され、JSONおよびJSON5はES2019と完全に互換になった
  • ライセンス
    • MITライセンスの下で提供される。

2件のコメント

 
GN⁺ 2024-12-09
Hacker Newsの意見
  • JSON は二重引用符の文字列のみをサポートするため、引用符の使い方に関する議論をなくせるという特徴がある。JSONC を使えばコメントと末尾カンマを追加できる
    • JSONC は Visual Studio Code で設定形式として使われている
  • JSON5 という名称は非倫理的だと思う。原作者の承認なしに次のバージョンであるかのように示唆するのは不適切だ
  • JSON5 を好んでおり、YAML は可読性が低いと思う。YAML ファイルを理解するために JSON 変換ツールをよく使う
  • JSON はシンプルだからこそ広く使われている。XML や YML のような複雑な代替物は適していないと思う
    • 複雑な形式を使うと問題が起こりうる
  • EDN が Clojure エコシステムの外であまり採用されていないのは残念だ
    • 標準はないが、ユーザーは問題なく使っている
  • JSON の特殊文字の問題を指摘している。JSON は UTF-8 として定義されているが、7 ビット ASCII 制御文字について誤った記述がある
    • RFC では 33 個の制御文字を含めるべきだ
  • TOML を勧めており、人間の可読性とツールサポートの完璧な組み合わせだと思う
  • JSON/YAML の代替でより多くの型をサポートするのは良い考えではないと思う
    • NestedText はほぼ理想的だが、複数の構文を使い、コメントをデータモデルに含めていない
  • JSON5 が BMP 外の Unicode 文字のための \U エスケープシーケンスを導入していない点を指摘している
    • UTF-16 サロゲートペアを使わなければならないのは煩雑で、Unicode 標準にも合っていない
  • JSON ではコメントとネイティブな datetime 型以外の機能は不要だと思う
    • 末尾カンマは便利だと思う