JSON を検証

何かに突き返されている文書を貼り付けて、どこで詰まるのかを突き止めてください。「無効です」だけでは足りません。ここでは行、列、そして地点を印したテキストの断片が出ます。パーサーの返すメッセージは、たいてい誤りのある場所ではなく気づいた場所を指すからです。何も送信されません。

結果

入力すると、ここに答えが出ます。

  • 処理される場所

    ファイルがないので、何もアップロードされません。計算はこのページの中で行われます。

  • 順番待ちもアカウントもなし

    お使いの機械の速さで答え、あなたが誰かを尋ねることはありません。

  • 何度でも

    回数は数えず、上限もありません。もう一度答えることに費用はかからないからです。

仕組み

  1. 突き返されている文書を貼り付けてください。
  2. 行と列、そして地点を印した抜粋を読みます。
  3. 直してもう一度貼り付けます。何も送信されていません。

パーサーの言う行と、誤りのある行

JSON のパーサーは辻褄が合わなくなった瞬間に止まります。その地点は、しばしば本当の誤りよりかなり後ろです。12 行目のカンマ落ちは、13 行目でカンマのあるべき場所に引用符が現れて初めて発覚します。そしてメッセージは 13 行目を指します。

だからここでは数字だけでなく、地点を印した断片が出ます。文脈が見えることが「4 列目」を「上の行のカンマが落ちている」に変えます。それが 10 秒で直すのと、200 行の文書を睨み続けるのとの差です。

ブラウザーごとにエラー文が違う

同じ壊れた文書が、Chrome と Firefox と Safari で違うメッセージを出します。JavaScript のエンジンごとに文面を書いているからです。位置を文字オフセットで示すものもあれば、位置をまったく示さないものもあります。

ここでは行と列を、メッセージの文面に頼らずオフセットから計算します。どのブラウザーでも答えが同じになります。どこを見ればよいかを告げるためだけに存在する道具に求められる、最低限のことです。

ほぼすべてを説明する 4 つの誤り

閉じ波かっこや閉じ角かっこの前の余分なカンマ。2 つの要素のあいだのカンマ落ち。ダブルクォートの代わりのシングルクォート。そして引用符のないキー。突き返される文書の圧倒的多数はこの 4 つで、4 つとも JSON を JavaScript のつもりで書いたことから来ます。

5 つめはもっと厄介です。文書の先頭にある見えない文字、ほぼ確実に Excel や Windows の一部のエディターが先頭に付ける BOM です。文書は完璧に見えるのに、パーサーは 1 列目で落ちます。誰も見ない場所がちょうどそこです。

妥当であることは正しいことではありません

文書が妥当な JSON であるとは、構文が整っているという意味であり、それ以上ではありません。数値であるべき項目が文字列で届いても、相手の期待しない書式の日付でも、キーが半分欠けたオブジェクトでも、この検査は通ります。

ここで妥当と出る文書を API がなお突き返すなら、問題はもう構文ではなくスキーマです。それは JSON Schema のバリデーターがその API の具体的なスキーマに対して確かめることで、このページが終わるちょうどそこから始まる別の問いです。

タブと、合わない列番号

タブを含む行の列を数えるのは曖昧です。タブは 1 文字ですが、画面上はエディターの設定次第で 4 桁分にも 8 桁分にもなります。文字数で計算した列番号は、そのとき目に見えるものと一致しません。

ここではパーサーと同じく文字を数え、抜粋のほうはタブを展開して表示します。印した地点が目の期待する位置に落ちるようにするためです。ごく小さな細部ですが、助けになる目印と混乱させる目印の違いはそこにあります。

妥当な文書から読み取れること

文書が通ったときは、その形も出ます。最上位がオブジェクトか配列か、キーがいくつあるか、どこまで入れ子になっているか、どれくらいの大きさか。どう処理するかを決める前に人が見る数値です。

4 つのうち最も役に立つのは入れ子の深さです。多くのパーサーと多くの API に上限があり、自動生成される文書は誰も予期しないうちにそれを超えます。意味の分からないエラーを説明してくれる日まで、誰も見ない数値です。

大きな数値は別に知らせます

文書に、正確なまま保てないほど大きな整数が含まれていれば、文書自体が妥当であってもその旨を伝えます。構文の誤りではなく、読み込む時点で起きる静かな損失で、JavaScript のパーサーを使うどのシステムでも同じように起こります。

独立した注意に値するのは、これが最も診断しにくい失敗だからです。文書はきれいに入り、きれいに出て、その途中で識別子の下の桁が変わっている。受け取ったシステムは、なぜかの手がかりなしにレコードを見つけられません。

整形したプレビューを置いていない理由

このページは 1 つの問いに答えます。どこで落ちるか。字下げして文書を見るのは整形のページの仕事で、そちらには字下げの選択とキーの並べ替えもあります。ここではどちらも出番がありません。

この区画でエンコードとデコードを分けているのと同じ判断です。ここに来る人は壊れたものを持っていて場所が欲しく、あちらに来る人は読めないものを持っていて見たいのです。1 つにすれば、双方にとって半分が余るページになります。

個人情報保護法から見たときの位置

何かに突き返されている文書は、たいてい本物の文書です。注文、顧客の記録、氏名と住所の入った webhook の本文。検査はページの中で行われるので、そのいずれも当方へ提供されず、当方のどのリクエストログにも残りません。

社内規程が防ごうとしているのはまさにこの事態——デバッグのために個人データを第三者のサービスへ貼り付けること——であり、ここではそれが起きません。受け取る第三者のサービスが存在しないからです。使っているあいだ、ネットワークパネルがそれを示します。

JSON を検証:よくある質問

13 行目と言われますが、誤りは 12 行目にあるようです。なぜですか。

普通のことです。パーサーは原因のある場所ではなく、辻褄が合わなくなった場所で止まります。12 行目のカンマ落ちは 13 行目で発覚します。だからここでは数字だけでなく、地点を印した抜粋を出します。

文書は妥当なのに API がまだ突き返します。なぜですか。

問題が構文ではなくスキーマだからです。型の違う項目、別書式の日付、欠けたキー。それは JSON Schema のバリデーターがその API のスキーマに対して確かめることです。

1 列目で落ちますが、おかしなところが見当たりません。

ほぼ確実に文書の前に BOM が付いています。Excel や Windows のエディターが置く見えない印です。UTF-8(BOM なし)で保存し直してください。

文書が妥当なのに数値の注意が出るのはなぜですか。

読み込む時点で正確なまま保てないほど大きな整数を含むからです。妥当であっても桁を失います。ここでも、JavaScript のパーサーを使うどのシステムでも同じです。その値は文字列として運ぶべきです。

文書は端末から出ますか。

いいえ。このページの中で検査されます。重要です。何かに突き返されている文書は、たいてい人のデータが入った本物の文書だからです。

他のツール