1733707772
2024-12-08 21:29:00
JSON5 は、一般的な JSON5 の拡張です。 JSON より簡単に扱えるようにすることを目的としたファイル形式 書いて維持する 手で (構成ファイルなど)。それは 意図されていない マシン間の通信に使用されます。 (そのためには、JSON または他のファイル形式を使用し続けてください。 🙂)
JSON5 は 2012 年に開始され、2022 年現在、 >6,500 万ダウンロード/週にランクインしています。 上位0.1% npm で最も依存しているパッケージの 1 つであり、次のような主要プロジェクトで採用されています。
クロム、
Next.js、
バベル、
リツール、
ウェブストーム、 そして もっと。また、ネイティブでサポートされています Apple プラットフォーム
のように MacOS そして iOS。
正式には、 JSON5 データ交換フォーマット JSON のスーパーセットです (したがって、有効な JSON ファイルは常に有効な JSON5 ファイルになります)。構文を拡張して、次のようなプロダクションを含めます。 ECMAScript 5.1 (ES5)。それはまた、 サブセット したがって、有効な JSON5 ファイルは常に有効な ES5 になります。*
この JavaScript ライブラリは、JSON5 の解析とシリアル化のためのリファレンス実装であり、上記の人気のあるプロジェクトの多くで直接使用されています (たとえば、極端なパフォーマンスが必要ない場合) が、他の人が作成した 他の多くのライブラリ
他の多くのプラットフォームでも利用できます。
機能の概要
JSON ではサポートされていない次の ECMAScript 5.1 機能が JSON5 に拡張されました。
オブジェクト
- オブジェクト キーは ECMAScript 5.1 である可能性があります 識別子名。
- オブジェクトの末尾にカンマが 1 つある場合があります。
配列
- 配列の末尾にカンマが 1 つある場合があります。
文字列
- 文字列は一重引用符で囲むことができます。
- 改行文字をエスケープすることで、文字列が複数行にまたがることがあります。
- 文字列には文字エスケープが含まれる場合があります。
数字
- 数値は 16 進数にすることができます。
- 数値には先頭または末尾に小数点が付いている場合があります。
- 数字は次のとおりです IEEE 754 正の無限大、負の無限大、NaN。
- 数値は明示的なプラス記号で始まる場合があります。
- 単一行および複数行のコメントが許可されます。
ホワイトスペース
- 追加の空白文字も使用できます。
例
キッチンシンクの例:
{
// comments
unquoted: 'and you can quote me on that',
singleQuotes: 'I can use "double quotes" here',
lineBreaks: "Look, Mom!
No \n's!",
hexadecimal: 0xdecaf,
leadingDecimalPoint: .8675309, andTrailing: 8675309.,
positiveSign: +1,
trailingComma: 'in objects', andIn: ['arrays',],
"backwardsCompatible": "with JSON",
}
より現実的な例は次のとおりです。 この設定ファイル
Chromium/Blink プロジェクトから。
仕様
JSON5 形式の詳細な説明については、「 公式仕様書。
インストールと使用方法
Node.js
CommonJS
const JSON5 = require('json5')
モジュール
import JSON5 from 'json5'
ブラウザ
UMD
"https://unpkg.com/json5@2/dist/index.min.js">
モジュール
"module">
import JSON5 from 'https://unpkg.com/json5@2/dist/index.min.mjs'
API
JSON5 API は以下と互換性があります。 JSON API。
JSON5.parse()
JSON5 文字列を解析し、文字列で記述された JavaScript 値またはオブジェクトを構築します。オプションの reviver 関数を提供して、結果のオブジェクトが返される前に変換を実行できます。
構文
JSON5.parse(text[, reviver])
パラメータ
text: JSON5 として解析する文字列。reviver: 関数の場合、解析によって最初に生成された値が返される前にどのように変換されるかを規定します。
戻り値
指定された JSON5 テキストに対応するオブジェクト。
JSON5.stringify()
JavaScript 値を JSON5 文字列に変換します。置換関数が指定されている場合はオプションで値を置換し、置換配列が指定されている場合は指定されたプロパティのみをオプションで含めます。
構文
JSON5.stringify(value[, replacer[, space]])
JSON5.stringify(value[, options])
パラメータ
value: JSON5 文字列に変換する値。replacer: 文字列化プロセスの動作を変更する関数、または JSON5 文字列に含める値オブジェクトのプロパティを選択/フィルタリングするためのホワイトリストとして機能する String オブジェクトと Number オブジェクトの配列。この値が null であるか指定されていない場合、オブジェクトのすべてのプロパティが結果の JSON5 文字列に含まれます。space: 読みやすさを目的として出力 JSON5 文字列に空白を挿入するために使用される String または Number オブジェクト。これが数値の場合は、空白として使用するスペース文字の数を示します。この数値の上限は 10 です (これより大きい場合、値は 10 になります)。 1 未満の値は、スペースを使用しないことを示します。これが文字列の場合、文字列 (それより長い場合は文字列の最初の 10 文字) が空白として使用されます。このパラメータが指定されていない場合 (または null の場合)、空白は使用されません。空白が使用されている場合、オブジェクトと配列では末尾のカンマが使用されます。options: 次のプロパティを持つオブジェクト:replacer: と同じreplacerパラメータ。space: と同じspaceパラメータ。quote: 文字列をシリアル化するときに使用する引用符文字を表す文字列。
戻り値
値を表す JSON5 文字列。
Node.js require() JSON5ファイル
Node.js を使用すると、次のことができます。 require() JSON5 ファイルに次のステートメントを追加します。
require('json5/lib/register')
次に、Node.js を使用して JSON5 ファイルをロードできます。 require() 声明。例えば:
const config = require('./config.json5')
CLI
JSON は JSON5 よりも広く使用されているため、このパッケージには、JSON5 を JSON に変換し、JSON5 ドキュメントの構文を検証するための CLI が含まれています。
インストール
npm install --global json5
使用法
もし が指定されていない場合は、STDIN が使用されます。
オプション:
-s、--space: インデントするスペースの数またはtタブ用-o、--out-file [file]: 指定されたファイルに出力します。それ以外の場合は STDOUT-v、--validate: JSON5 を検証しますが、JSON を出力しません-V、--version: バージョン番号を出力します-h、--help: 使用状況情報を出力します
貢献する
発達
git clone https://github.com/json5/json5
cd json5
npm install
コードを提供する場合は、関連するテストを作成して実行してください。 npm test そして npm run lint プルリクエストを送信する前に。対応したエディタをご利用ください。
エディタ設定。
問題
JSON5 に関するバグを報告したり、機能をリクエストしたりするには データ形式、公式に問題を送信してください。
仕様 リポジトリ。
JSON5 と ES5 の互換性をなくす機能は決して追加しないことに注意してください。互換性は JSON5 の基本的な前提です。*
これに関するバグを報告したり、機能をリクエストしたりするには JavaScriptの実装
JSON5 の場合は、次の宛先に問題を送信してください。 これ リポジトリ。
セキュリティの脆弱性と開示
セキュリティの脆弱性を報告するには、次のガイドラインに従ってください。 セキュリティポリシー。
ECMAScript の互換性
JSON5 は ES5 との完全な互換性を目指していますが、JSON と JSON5 の両方に互換性がない例外が 1 つあります。 JSON と JSON5 は両方とも、文字列内でエスケープされていない行区切り文字と段落区切り文字 (U+2028 および U+2029) を許可しますが、ES5 は許可しません。あ 提案 文字列内でこれらの文字を許可する機能が ES2019 に採用され、JSON および JSON5 は ES2019 と完全に互換性があります。
ライセンス
と。見た ライセンス.md 詳細については。
クレジット
アシーム・キショア がこのプロジェクトを設立しました。彼はこう書きました ブログ投稿
10年間の旅と学んだ教訓について。
マイケル・ボーリン 同じアイデアのいくつかを独自に発見し、素晴らしい説明と詳細とともに公開しました。推奨読書: JSON に対する提案された改善点
ダグラス・クロックフォード もちろん JSON を設計して構築しましたが、彼のステート マシン ダイアグラムは JSON ウェブサイト安っぽく聞こえるかもしれませんが、これらのアイデアを実装するための新しいパーサーの構築は手の届くところにあるというモチベーションと自信を与えてくれました。 JSON5 の元の実装も、Doug のオープンソースから直接モデル化されました。
json_parse.js パーサー。クリーンで十分に文書化されたコードに感謝しています。
マックス・ナナシー は初期から多作のサポーターであり、複数のパッチやアイデアを提供してきました。
アンドリュー・アイゼンバーグ オリジナルを寄稿した
stringify 方法。
ジョーダン・タッカー は JSON5 を ES5 とより密接に連携させ、公式の JSON5 仕様を作成し、コードベースをゼロから完全に書き直して、このプロジェクトを積極的に保守しています。
#JSON5 #人間のための #JSON