以前に作られたシステムにて不具合が出ており、
jsonをデコードする際にNULLとなってしまいます。
原因がわからず、ご教授いただければと思います。
なぜこんな作りにしたかも今となってはわかりませんが・・・
<?php $data = array("data" => array('ああああ"あ', 'いいい')); $json = json::json_data($data); // var_dump($json)とすると、ダブルクォートがエスケープされていない。関数内ではエスケープされているが // この時点でエスケープが外れる要因がわからず $decode = json_decode($json, true); var_dump($decode); class json { public static function json_data($s){ $from = array("\"","\'","\n",","); $to = array("\\"", "\\'", "\n", "\,"); $a = array(); if (sizeof($s) == 0) { return '[]'; } elseif (isset($s[0])) { foreach($s as $p) array_push($a, (is_string($p)? '"'.str_replace($from, $to, $p).'"': self::json_data($p))); // この時点で、ダブルクォーとはエスケープされることはデバックで確認済み return '['.implode(',', $a).']'; } else { foreach($s as $p => $q) array_push($a, "\"$p\":".self::json_data($q)); return '{'.implode(',', $a).'}'; } } }
上記デバックを実施した結果もコメントを入れておりますが、
ダブルクォートがエスケープされておらず、ブラウザに情報を表示しても
ファイルに書き出してもエスケープの「\」が入っていない状態で出力されてしまいます。
実際の作成されるjsonデータは、1000biteあり、デコードした際にどこがエラーになっているか調査するのも困難です。
なお、ブラウザに出力されたjsonデータを下記サイトにて構文チェックをしたところ、
やはりダブルクォートが原因でした。
https://lab.syncer.jp/Tool/JSON-Viewer/
回答1件
あなたの回答
tips
プレビュー