JavaScriptオブジェクトをJSONに変換して厳密なJSONにする
キーにクォートがない、シングルクォートを使っている、コメントや末尾のカンマがあるといったJavaScriptオブジェクトを貼り付けると、厳密でエスケープ済みのJSONに変換できます。JSからJSONへの変換でも、テキストはパーサーが読み取るだけで、コードとして実行されることはありません。コンソールや設定ファイル、サンプルコードのテキストも、そのまま貼り付けられます。
JavaScriptオブジェクトをJSONに変換する手順
- JavaScriptオブジェクトまたはJSONの欄にオブジェクトを貼り付けてください。貼り付けると同時に変換されます。入力した場合は、入力が止まってから約300ミリ秒後に結果が更新されます。
- フォーマットで結果の見た目を選んでください。ミニファイ(初期設定、1行にまとめる)、スペース2個、スペース4個から選べます。
- 結果は厳密なJSONの下に表示されます。その下に「厳密なJSONに変換しました。」と文字数が出ます。
- 結果のすぐ下にあるコピーを押してください。ボタンの表示が一瞬コピー完了に変わります。
- 入力欄を空にしてやり直すときは消去を押してください。
簡単な例です。{name: 'Ana', tags: ['a', 'b',], id: 0xFF}を貼り付けます。ミニファイを選んでいる場合、結果は{"name":"Ana","tags":["a","b"],"id":255}になります。
読み取れる緩いJavaScript構文
テキストはJSON5パーサーで読み取ります。JavaScriptのオブジェクトリテラルとJSONの違いを理解しているため、次のような書き方は拒否されずに変換されます。
- クォートなしのキー:
{name: "Ana"}は{"name":"Ana"}になります。 - シングルクォートの文字列:
{a: 'x'}は{"a":"x"}になります。 - 末尾のカンマ:
[1, 2,]は[1,2]になります。 - コメント:
// メモと/* メモ */は取り除かれます。 - 16進数:
0xFFは255になります。 - 先頭のプラスや小数点だけの書き方:
+1、.5、5.は1、0.5、5になります。 - NaNとInfinity:
{a: Infinity}は{"a":null}になります。 - バックスラッシュで複数行に分けた文字列は、改行のない1つの文字列になります。
文字列の中の引用符、バックスラッシュ、改行は自動でエスケープされます。たとえば'He said "hi"'は"He said \"hi\""になります。すでに有効なJSONは、選んだレイアウト以外は変わらずそのまま通ります。
JSONミニファイと、2スペース・4スペースの整形
結果の上にフォーマットのメニューがあります。ミニファイはスペースなしで1行にまとめるので、リクエストの本文、テスト用のデータ、文字列の中に貼り付ける値に向いています。
スペース2個とスペース4個は、読みやすく差分も取りやすいインデント付きのレイアウトです。選んだ時点で結果が切り替わり、コピーは表示されている内容をそのままコピーします。
読み取れないものとエラーメッセージ
受け付けるのはデータだけで、コードは読み取れません。パーサーが止まると、赤い枠に読み取れませんでしたと表示され、理由と「1行目、6列目」のような位置が示されます。たとえば{a:1 b:2}ではbで止まり、その直前にカンマ、コロン、括弧、引用符の抜けがないか確認するよう案内されます。括弧、波括弧、引用符が閉じられないままテキストが終わった場合は、代わりに「テキストが途中で終わっています。」と表示されます。
const x = {a: 1}:最初の文字で止まります。オブジェクトだけを貼り付けてください。{a: 1};:最後のセミコロンで止まります。セミコロンを削除してください。- バッククォートの文字列(テンプレート)は受け付けません。シングルクォートかダブルクォートを使ってください。
undefined、関数、new Date()は受け付けません。コードであるか、JSONで表せないためです。日付は文字列で書いてください。- カンマ、コロン、括弧が抜けている場合は、抜けた箇所の次の文字で止まり、行と列が表示されます。
数値や重複キーなど、変わるもの
結果はブラウザ自身のJSON.stringifyで作られるため、数値はJavaScriptの数値として扱われます。コピーする前に知っておきたい点は次のとおりです。
9007199254740991を超える整数は精度が落ちます。12345678901234567890は12345678901234567000になります。1.0は1に、0xFFは255になります。- NaN、Infinity、-Infinityは
nullになります。 - 同じキーが2回出てきた場合は、最後の値が残ります。
すでに有効なJSONで、すべての桁をそのまま残してインデントだけしたいときは「JSON整形ツール」を使ってください。スキーマに照らして確認したいときは「JSON Schema バリデーター」を使ってください。
上限とプライバシー
- 最大5,000,000文字です。それより長いテキストは、上限を伝えるメッセージとともに受け付けられません。
- パースの際にテキストが実行されることはないので、貼り付けたコードが動くことはありません。
- テキストはすべてお使いの端末の中で変換されます。アップロードも保存もされません。
よくある質問
JSON変換をオンラインで行うには?
「JavaScriptオブジェクトまたはJSON」の欄にオブジェクトを貼り付けてください。貼り付けるとすぐに、入力した場合は止まってから約300ミリ秒後に変換され、「厳密なJSON」の下に結果が表示されます。「コピー」を押すと持ち出せます。貼り付けるのはオブジェクトそのものだけで、const data = {...}; のような行は含めないでください。
シングルクォートをダブルクォートにするには?
テキストを貼り付けてください。シングルクォートの文字列はすべてダブルクォートになり、その中のダブルクォートは自動でエスケープされます。たとえば 'He said "hi"' は "He said \"hi\"" になります。変更されるのは文字列とキーだけなので、ダブルクォートの文字列に含まれるアポストロフィはそのままです。
JSONの末尾のカンマを取り除くには?
テキストを貼り付けてください。[1, 2,] のように、オブジェクトや配列の最後の要素の後ろにあるカンマは、入力としては受け付けられ、「厳密なJSON」の結果には含まれません。データのほかの部分は変わりません。
JSONにクォートなしのキーやコメントは使えますか?JSON5との違いは?
厳密なJSONでは使えません。キーも文字列もダブルクォートが必要で、コメントの書き方もありません。JavaScriptのオブジェクトや設定ファイルには、この両方がよく含まれます。このツールはそれらを読み取り、キーをダブルクォートで書き直し、コメントを取り除くので、結果は有効なJSONになります。JSON5はJSONを緩くした上位互換の書き方で、クォートなしのキー、シングルクォートの文字列、末尾のカンマ、コメント、16進数などを許します。このツールはその構文を読み取って通常のJSONで書き出します。
JSONをミニファイしたり、2スペースや4スペースで整形したりするには?
結果の上にある「フォーマット」のメニューを使います。初期設定の「ミニファイ」はスペースなしの1行になります。スペース2個とスペース4個はインデント付きの表示です。別の選択肢を選ぶと、結果と「コピー」でコピーされる内容もすぐ切り替わります。
「読み取れませんでした」と表示されるのはなぜですか?
パーサーが理解できるオブジェクト、配列、値になっていないためです。赤い枠には止まった位置(たとえば「1行目、6列目」)と、確認すべき点が出ます。直前にカンマ、コロン、括弧、引用符の抜けがないか、または最後に括弧、波括弧、引用符が閉じられていないかを確認してください。const x = {...} のような文、末尾のセミコロン、バッククォートの文字列、undefined、関数、new Date() は受け付けません。オブジェクトだけを貼り付けてください。
貼り付けたJavaScriptは実行されますか?
いいえ。テキストはパーサー(JSON5)が読み取るだけで、evalは使いません。そのため、貼り付けたものが実行されることはありません。関数、変数名、new Date() がエラーになるのも同じ理由です。評価する対象ではなく、エラーとして扱われます。
大きな数値が変わってしまったのはなぜですか?
数値はJavaScriptの数値として扱われ、正確に表せるのは9007199254740991までです。12345678901234567890 は 12345678901234567000 に、1.0 は 1 になります。長いIDの全桁を残したいときは、入力で引用符に入れるか、数値を書かれたとおりにコピーする「JSON整形ツール」を使ってください。NaN、Infinity、-Infinity はJSONで書き表せないため null になります。同じキーが2回出てきた場合は、最後の値が残ります。
JSON.stringifyと同じですか? 貼り付けられる文字数やアップロードについても教えてください。
結果はJSON.stringifyで作っているので、出力のルールは同じです。違いは入力です。JSON.stringifyはコードの中の本物のオブジェクトが必要ですが、ここではオブジェクトのテキストを貼り付けるので、緩い構文も使えます。最大5,000,000文字まで入力できます。変換はお使いの端末の中で行われ、アップロードも保存もされません。
おすすめ
-
1冊ですべて身につくJavaScript入門講座オブジェクトの書き方を、貼り付ける前にJavaScriptの基本から確認できます
-
ロジクール Alto Keys K98M メカニカルキーボードリクエストボディやfixtureを何本も作る日も、打鍵が快適です
-
山田照明 Z-LIGHT LEDデスクライト Z-108NB設定ファイルを整える夜も、手元が明るく目が疲れにくい
無料でツールを続ける支えになります。✨
画像はイメージです。 Amazonのアソシエイトとして、Capsule Toolsは適格販売により収入を得ています。