初めてJSONを縮小することが実際に私にとって重要だったのはウェブサイト上ではありません - マイクロコントローラ上でした私は数キロバイトのメモリを空けて装置にコンフィグレーションブロブを出荷していましたそして私が手作業で編集していたかなり印刷されたバージョンは空白を取り除いた同じデータの2倍近い大きさでした同じキー、同じ値、同じ構造 - 唯一の違いは純粋に人間が読めるように存在する何千ものスペースと改行でしたそれらを剥ぎ取りペイロードがフィットすることですそれが縮小化の背後にあるすべてのトリックであり、それはチップ上に絞り込まれたコンフィグファイルに対して行うのと同じくらい、1日に100万回提供されるAPI応答に適用されます。
このガイドは、無料を中心に構築された、JSON を縮小する方法と理由の徹底的なバージョンです JSON ミニファイア ツール。 minificationが削除するものと、それが意図的に放っておくもの、なぜ小さいJSONがより速いのか、minificationがフォーマットやエスケープとどのように異なるのか、そして1 つの微妙なプロパティ - 数精度 - は、慎重なミニファイアと不注意なミニファイアと同じファミリーの一部です JSON フォーマッタ 私は反対の仕事に使用しており、それは私がレイアウトしたツールキットに属しています JSON ツールの究極のガイド。
tl;dr: JSONを最小化すると、トークンの間に位置するすべてのスペース、タブ、改行が削除され、まったく同じデータに解析する最小のテキストが生成されます。キー、値、またはその順序については何も変更されず、空白のみが変更されます JSON ミニファイア 最初に入力を検証し、不正な形式の場合は parser's の正確なエラーを報告し、文字列リテラルの外側の空白のみを削除して値内のテキストが手つかずになり、数値トークンをバイト単位で保持して 1.0 のような値が 1.0 のままになります。 beautify モードでは、2 スペース、4 スペース、またはタブでプロセスが反転されます。すべてがブラウザーで実行されます。
JSONを縮小すると実際に何ができるのでしょうか?
JSON ドキュメントは、中括弧、括弧、コロン、コンマ、文字列、数値、リテラルのトークンのシーケンスです true、 false、そして null.それらのトークンの間で、json文法は任意の量の空白を許し、pretty-printed JSONはその許容を惜しみなく使います: すべてのカンマの後に改行、ネストレベルごとに2 つまたは4 つのインデントのスペース、すべてのコロンの後にスペース その空白のすべてが人間の目のために存在しているパーサーはそれを完全に無視します。
縮小化とは、それらの取るに足らない空白文字をすべて削除し、トークン自体と文法に必要な最小限の句読点だけを残す行為です。 40 個のインデントされた行として読み取るコンフィグは、単一の密な行に折りたたまれます。重要なことに、 でー は同一です - ミニファイド版とプリティ版を解析すれば全く同じオブジェクトが得られます 同じキーが同じ順序で同じ値です ミニファイドは表現を変えます 意味は決して変わりません これ全てが載っている文法は として公開されます RFC 8259、これは重要でない空白としてカウントし、そうでないものについての権威です。
1 つの場所の空白は でないよ 取るに足らないものは文字列の中にあります. のスペースは "hello world" は値の一部であり、手付かずでミニ化に耐えなければなりません。 正しいミニファイアーは、したがって、テキスト内のすべてのスペースを単純に削除することはできません; それは文字列リテラル内にあるかどうかを追跡し、そのコンテンツを放置する必要があります JSON ミニファイア これはまさにこれを行い、テキストを文字ごとに記述し、トークンの間に位置する空白をドロップするだけで済むため、値の 1 つ内の意図的なスペースが失われることはありません。
なぜわざわざJSONを縮小するのでしょうか?
見出しの理由はサイズであり、サイズはウェブ上の速度とコストに直接変換されます JSONレスポンスのすべてのバイトはネットワーク上を移動する必要があり、数千回または数百万回要求されたペイロードの場合、空白は合計すると実際の帯域幅になります 字下げと改行は一般に、かなり印刷されたドキュメントの5分の1から3分の1を占めます' s サイズなので、縮小するとすべての転送で意味のあるスライスが削減されます 小さな応答は、特に遅いモバイル接続ではより速く到着し、出力の料金を支払っているときにサービスを提供するのにかかるコストが低くなります。これが、事実上すべての実稼働 API が縮小された JSON を返し、データを Web アプリにバンドルするすべてのビルド ツールが最初に縮小する理由です。
解析の利点もあります より小さいとはいえ. whitespace の実行をスキップする必要がないパーサーは, やるべき仕事がわずかに少なく, ホットループで処理される非常に大きなドキュメントの余白で問題になります. そして, そもそも私をここにもたらした記憶角度があります. JSON を制約されたスペースにフィッティングしているとき - サイズ制限のある Cookie, 組み込みデバイス, キャップ付きのデータベース列, URL クエリパラメータ - ミニ化されたフォームがそれをフィットさせるものです. ツールのサイズ節約バッジは, 前後のバイトとパーセンテージの削減を示すので, 特定のドキュメントがミニ化する価値があるか, すでに無駄のないものであるかをすぐに確認できます。
ミニ化とは何ですか でないよ buy you is secrecy or compression in the heavyweight sense. minified JSONはまだプレーンテキストであり、それを解析するものにはまだ完全に読み取れます; whitespaceを削除することは暗号化ではなく、gzipではありません.ワイヤー上では、JSONは通常minificationの上にgzip圧縮され、2 つは補完的です - minificationは文法が許す冗長性を取り除き、gzipはバイトストリームの冗長性を隠していると思うからではなく、上記の理由でminify.
ミニ化はフォーマット、エスケープ、圧縮とどのように異なりますか?
これら4 つの操作は絶えず混乱し、それらをまっすぐに保つことは間違ったツールに手を伸ばすことからあなたを救います 彼らはさまざまなことに行動し、さまざまな問題を解決します。
縮小化 重要でない空白を削除して、有効な JSON を維持しながらドキュメントを小さくします。 フォーマット、または美化、逆を行います: それは、ドキュメントを読みやすくするためにインデントと改行を追加します, これは、あなたがAPIレスポンスをデバッグしているときや手でコンフィグを編集しているときに必要なものです JSON ミニファイア どちらも同じ軸の 2 つの方向であるため、機械の場合は小さく、人々の場合は美しくなります。 脱出 はまったく別の軸です。つまり、テキストの塊を安全に配置できるようになります 中に クォートとコントロール文字をバックスラッシュ シーケンスに変換する JSON 文字列。これは、のジョブです JSON エスケープ / アンスケープ ツール。 と 圧縮 gzip と同様に、JSON 層の下の生のバイトで動作し、縮小が完了すると転送はさらに縮小されます。
この表には、それぞれのツールの違いとポイントが示されています。
| 操作 | 変わるもの | 結果はまだJSON? | ツール |
|---|---|---|---|
| ミニファイ | トークン間の空白を削除します | はい、同じデータです | JSON ミニファイア |
| Beautify / フォーマット | 字下げと改行を追加します | はい、同じデータです | JSON フォーマッタ |
| 脱出 | JSON 文字列の中に配置するようにテキストをエンコードします | 文字列値になります | JSON エスケープ / アンスケープ |
| Cssを縮小する | スタイルシートから空白を削除します | JSONではなくCSSです | CSS ミニファイア |
| HTMLを縮小 | マークアップから空白を削除します | JSONではなくHTMLです | HTML ミニファイア |
同じミニファイ フォー シッピングのアイデアがフォーマット間で実行されるため、 CSS ミニファイア あんど HTML ミニファイア このビルドのすぐ隣に座ってください。フルビルドでは、同じ帯域幅の理由で JSON データ、スタイルシート、マークアップが縮小されます。
JSON を縮小するとデータが変更されることはありませんか?
縮小するべきだというのが正解です 決して データを変更し、良いツールはそれを保証します しかし、慎重なミニファイアを素朴なものから分離する微妙さがあり、それはあなたを噛むことができるので理解する価値があります。
多くのミニファイアーは、JSON をメモリ内オブジェクトに解析し、空白なしで再シリアル化することで機能します。往復は便利ですが、すべての値が途中で言語' s 数字タイプを通過することを意味し、それによって数値のあり方が書き換えられます 書かれた 数学的値は変わらないのに. と書いた値を, 1.0 として戻ってくる 1。 のような値 1e3 として戻ってくる 1000。 language's 数値タイプよりも多くの桁を持つ整数は正確に保持できます - 約 16 桁の有効数字を超えるものはすべて - 微妙に変更されて戻ってくる可能性があります。ほとんどのドキュメントでは、これは問題ありませんが、JSON がバージョン文字列、データベース識別子、または固定精度の小数を数値として保持している場合、再解析して制限するミニファイアによって、ミニファイアが静かに破損する可能性があります。
ザ・ JSON ミニファイア 微細化の仕方が違うので罠を回避します それでも 検証 入力は解析することで取得されるため、不正な JSON が捕捉され、レポートされます。しかし、出力を生成するには、解析されたオブジェクトを再シリアル化するのではなく、元のテキストから直接空白を剥奪します。つまり、すべての数値トークンは、記述したとおりに正確に保存されます。末尾のゼロ 1.0 滞在 1.0; 30 桁の整数は 30 桁すべてを保持します。数値が書き換えられるリスクなしに、最小化のサイズを縮小できます。検証とバイトごとの忠実度の最良です。 beautify の方向性は、トランスポートではなく可読性を重視しており、標準的な再シリアル化を通じて書式設定を正規化します。これは、人間の読み取り用に再フォーマットするときに期待される動作です。
JSON が縮小されない場合、エラーを読み取るにはどうすればよいですか?
ツールは、それが縮小する前に検証します, これは、不正なフォーマットされた文書は、壊れた出力ではなく、エラーを生成することを意味します - そして、そのエラーは障害ではなく、機能JSONは本当の問題を持っていることを伝えます 前に それを拒否するであろう場所に発送します。あまり役に立ちません。
メッセージは JavaScript JSON パーサーから直接送信され、通常は位置を指定します。最も一般的な原因は、配列またはオブジェクトの最後の要素の後に末尾のカンマがあり、これは strict JSON が禁止します; JSON は JavaScript オブジェクト リテラルとは異なり引用符で囲まれたキーを必要とするため、ダブルクォーテーションでラップされていません; double の代わりにシングル クォーテーションを使用する文字列; そして、何かが開かれていて閉じられていない不平衡括弧または中括弧です。これらはそれぞれ、どこを見るべきかがわかったら小さな修正であり、報告された位置は近傍を指します。ソースが実際に JSONC である場合 - 一部の構成ファイルで使用されているコメントと末尾のカンマを含む JSON - これらは標準の JSON ではなく拡張であるため、そのまま縮小されません。; コメントと末尾のカンマを最初に削除するか、厳密な JSON に変換すると、検証されます。
構造が有効だが、見えないとき なんでや 2 つのドキュメントの動作は異なり、両方を美化して比較するか、ドキュメントを実行します json 差分 どのキーまたは値が異なるかを正確に確認するためのツール。 JSON のデバッグは、私が作成した日常的なケースである、かなり簡単な形式ではるかに簡単です JSON フォーマッタガイド。そして、この検証と縮小化はすべてアップロードされたものが何もないブラウザで行われるため、API キー、トークン、または顧客レコードを含むペイロードを安全に貼り付けることができます。プライバシーの議論については、私が完全に説明しました オンライン ツールのデータ プライバシー ガイド。
有効な例: 読み取り可能な構成から出荷されたペイロードまで
ツールがその場所を獲得していることを示す往復は次のとおりです。サービス構成を手作業で編集しているため、読みやすさを考慮してかなり印刷されているとします。オブジェクト キーを独自の行に配置し、2 つのスペースのインデント、スキャンしやすい空白の構造。長さ制限のある環境変数に入る前に、できるだけ小さくする必要があります。
に設定を貼り付けます JSON ミニファイア、クリックします Minify, そしてそれは単一の行に崩壊します. サイズバッジは、340 まで512 バイトのようなものを読み取るかもしれません, 3 分の1 の減少, これは、フィッティングの差分です& #39; s制限とそうではありません. minified行を環境ファイルにまっすぐにコピーするように書いたタイムアウトに気づきます. 1.5 は 静止 1.5 そして再試行回数は 3 は 静止 3 - 数字は手付かずであり、長い数値識別子がある場合は、ツールが値を再解析するのではなく空白を取り除いたため、数値もそのまま残ります。
数週間後のバグ報告ではログ内の同じミニ化された塊を見つめていますが、それは1 つの密な線として読めません それをツールに戻し、Beautifyをクリックし、2 つのスペースを選択し、実際にスキャンできるインデントされたフォームに展開します 値を固定し、もう一度ミニファイし、もう一度出荷します その双方向の流れ - 読み取りと編集のために beautify、保存と送信のためにminify - は毎日のリズムであり、サイズ読み出しと正確なエラーレポートで両方を1 か所に持つことは、それが速いものである ビルドアンドシップユーティリティのより広いセットのために これは中に座っています、 Web 開発者ツールキット 残りを切り上げます.
よくある質問
JSONをオンラインで縮小するにはどうすればよいですか? JSONを入力領域に貼り付けて「縮小」をクリックします。ツールは文字列値の外側の空白をすべて削除し、圧縮された結果をサイズの節約とともに表示します。すべてがブラウザで実行されるため、何もアップロードされません。
JSONを縮小するとデータが変更されますか? いいえ 縮小化ではトークン間の空白のみが削除されるため、キー、値、およびそれらの順序は同一になります。縮小化されたドキュメントは、元のきれいな印刷されたオブジェクトまたは配列とまったく同じオブジェクトまたは配列に解析されます。
そもそもなぜJSONをミニ化するのか? ミニファイドJSONは小さいため、ネットワーク経由で転送速度が速く、使用する帯域幅が少なく、解析速度がわずかに速くなります。 API応答、構成ファイル、およびWebアプリにバンドルされているデータは、通常、これらの理由により、本番環境でミニファイド化されます。
このツールは、1.0 または大きな整数のような数値書式を保持しますか? はい。値を再解析するのではなく空白をストリップするため、数値トークンは記述したとおりに保持されます。1.0 のような値は 1.0 のままで、非常に大きな整数はすべての桁を保持するため、解析して制限するミニファイアーが書き直します。
JSONをミニ化することと美化することの違いは何ですか? 縮小すると空白が削除され、JSON がマシンにとってできるだけ小さくなります。一方、美化するとインデントと改行が追加され、人々が読みやすくなります。このツールは、出荷用に縮小、編集とデバッグ用に美化の両方を行います。
コメントや末尾のカンマでJSONを縮小できますか? いいえ Standard JSON ではコメントや末尾のカンマは許可されないため、ツールは検証中にそれらをエラーとして報告します。 comments と末尾のカンマを最初に削除するか、JSONC を strict JSON に変換してから縮小します。
ここで機密のJSONを縮小しても安全ですか? はい。すべての処理はブラウザ内の JavaScript で行われるため、JSON はどのサーバーにも送信されず、何もログに記録されず、ツールは接続を無効にして動作します。 API キーや個人データを含むペイロードを安全に縮小できます。
JSON が縮小化ではなくエラーを表示する理由は何ですか? ツールは、縮小する前に入力を検証するため、エラーは、JSONが不正な形式であることを意味し、通常は、不足しているまたは余分なカンマ、引用符で囲まれていないキー、単一引用符で囲まれた文字列、または不均衡な括弧を修正できるように、メッセージには問題の位置が含まれています。
このガイドは無料に付属しています JSON ミニファイア Toolz.dev上のツール - サインアップなし、アップロードなし、オフラインで動作します。



