質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.91%

Jsonデータでフォーマットエラーの理由が分からず困っています。

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,561

hidepon

score 188

Ajax でデータをPHPにデータを送信してJson形式で返答するのですが、返信するJsonデータになぜか「・」というゴミが付いてしまいます。
(Chromeの開発ツールで赤字で表示されています。)
正常に動いているJson データにはなく、異常が発生する側にはこの「・」が付いています。
PHP には特にそのような記述も無く、途方に暮れています

何か理由があるのでしょうか?
ご存知の方、教えていただけるでしょうか?
(追記・訂正)
https://syncer.jp/json-prettyprint
というサービスでJsonチェックができるとのことで
やってみると

{"103":"\u3066\u3059\u3068\u3066\u3059\u30683","214":"\u3066\u3059\u3068\u3066\u3059\u306810","240":"\u3066\u3059\u3068\u3066\u3059\u306817","175":"\u3066\u3059\u3068\u3066\u3059\u306824","100":"\u3066\u3059\u3068\u3066\u3059\u306831","114":"\u3066\u3059\u3068\u3066\u3059\u306838","125":"\u3066\u3059\u3068\u3066\u3059\u306842","136":"\u3066\u3059\u3068\u3066\u3059\u306845","145":"\u3066\u3059\u3068\u3066\u3059\u306850"}


「SyntaxError: Unexpected token  in JSON at position 0」

というエラーメッセージが出ました。
「・」というのはエラーがあるという表現らしいです。ここは理解できました。
なぜ、このエラーがでるのかがわかりません。
ご存知の方教えていただければと思います。
宜しくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    退会済みユーザー

    2017/05/28 12:27

    jason ではなく、 json です。

    キャンセル

  • hidepon

    2017/05/28 12:28

    申し訳ございません。訂正します。

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2017/05/28 12:32

    タイトルも間違っています。

    キャンセル

  • hidepon

    2017/05/28 12:34

    見落としていました、申し訳ございません。

    キャンセル

回答 3

checkベストアンサー

+3

おそらくですが、どこかのPHPファイルの先頭にBOMという「見えない文字」が混入していて、それが先頭に出力されているものと思われます。

PHPファイルに限らず、UTF-8テキストにBOMは本来不要なものなので、「UTF-8N」あるいは「UTF-8(BOMなし)」という形を選んで保存しましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/03 16:20

    ズバリの内容でした。有難うございました。

    キャンセル

0

 Unocodeエスケープシーケンス

\u から始まるUnocodeエスケープシーケンスは4桁の16進数値が後続しなければなりません。

HexDigit::one of
  0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
UnicodeEscapeSequence::
  u Hex4Digits
  u {HexDigits}

Hex4Digits::
  HexDigit HexDigit HexDigit HexDigit

Re: hidepon さん

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/29 00:07

    "\u30683" はUnicodeエスケープシーケンス + 数値文字列としてパースされる為、この回答は流して下さい。

    キャンセル

0

提示のJSONはパースできるので、出力に問題が有ると思います。出力部分を提示されたほうが解決につながると思います。(意図せぬエラーや不用意なechoなどが紛れていませんか?)

JSON.parse('{"103":"\u3066\u3059\u3068\u3066\u3059\u30683","214":"\u3066\u3059\u3068\u3066\u3059\u306810","240":"\u3066\u3059\u3068\u3066\u3059\u306817","175":"\u3066\u3059\u3068\u3066\u3059\u306824","100":"\u3066\u3059\u3068\u3066\u3059\u306831","114":"\u3066\u3059\u3068\u3066\u3059\u306838","125":"\u3066\u3059\u3068\u3066\u3059\u306842","136":"\u3066\u3059\u3068\u3066\u3059\u306845","145":"\u3066\u3059\u3068\u3066\u3059\u306850"}');
/*
Object { 100: "てすとてすと31", 103: "てすとてすと3", 114: "てすとてすと38", 125: "てすとてすと42", 136: "てすとてすと45", 145: "てすとてすと50", 175: "てすとてすと24", 214: "てすとてすと10", 240: "てすとてすと17" }
*/

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る