作成日:2018-01-29, 更新日:2018-04-26
基本
コントローラーでJSONの文字列を渡すとき、「View::forge(〇〇〇, 〇〇〇, true)」のように第3引数を「true」にする。
「View::forge(〇〇〇, 〇〇〇, true)」にする
経緯
コントローラーでJSONの文字列を渡して、Viewで条件によってJSONを展開するっていうことをしようとした。
でも「json_decode()」すると「NULL」になってしまう。
「json_last_error()」でエラーを調べると「JSON_ERROR_SYNTAX」が返ってきた。
コントローラーから受け取ったJSONの文字列を出力してみるも構文エラーになっている箇所が見つからない。
受け取った文字列(変数)じゃなく、直接「json_decode()」に書き込んでみたら展開された。
▼下記のような感じ。
// コントローラーで受け取ったJSONが格納された変数
var_dump(json_decode($json)); // NULLが返ってくる
// コントローラーで受け取ったJSONと同じ文字列をそのまま記述
var_dump(json_decode('{"〇〇":"〇〇", "〇〇":"〇〇"}')); // 展開される
コントローラーから受け取ったJSONの文字列(変数)を「var_dump()」しても変な文字も入っていないしstringとして値が入っている。
完全にお手上げ状態だったのだけど、たまたま別ページで展開成功していたコトに思いいたった。
とりあえず比較・・・。
コントローラーから受け取ったJSONの文字列を見ても違うようには見えない。
それでも「微妙に違うかもしれない!」と思い「var_dump()」してみた。
・「json_decode()」でエラーになっているviewでvar_dump()
・「json_decode()」でエラーになっていないviewでvar_dump()
それぞれ比較すると、文字列は同じだけど文字数のみ異なっていた。
string(113) "{"〇〇〇":"〇〇〇", "〇〇〇":"〇〇〇"}"
string(83) "{"〇〇〇":"〇〇〇", "〇〇〇":"〇〇〇"}"
値(文字列)は同じだけど型が微妙に違う。
「string(113)」と「string(83)」と数字だけ異なっている。
ココでそれぞれの違いを考えたら前述の「View::forge(〇〇〇, 〇〇〇, true)」ってトコにたどり着いた。
関連項目
・PHP JSONの変換:エラー処理