初心者です。
ゴール
APIから取り出したJSON風のデータ型から、
【JavaScript/CSS でカラオケ風テロップ表示】
https://pronama.jp/2015/03/20/karaoke-telop/
のように、
歌詞・タイムスタンプを『フレーズごとに個別に』取り出してJavascriptで
カラオケ風に表示する事。
※私が唯一まともに扱える言語がPHPのため、PHPの変数で受け取れるととても嬉しいです。
しかし、結論無理なら、
JSON.stringify
JSON.parse
といった関数を1から勉強してみます。
今回実現したい事
以下の型のファイルを、PHPでパースしたい
hoge.json
1[{'text': 'MIKAN', 'start': 0.4, 'duration': 0.867}, {'text': "Yesterday's B'z concert's very exciting.", 'start': 1.301, 'duration': 2.669}]
しかし、シングルクオートが混ざってるので、JSON(風)です。JSONにすればいいのに、との修正依頼ありがとうございます。私もスマートじゃ無いと思います。
さて、このままだと
大元のJSON(仮)ファイルの、各配列の括り方が、シングルクオートとダブルクオートが混ざり、エラーが出てしまいます。Pythonだと、literal_eval、というサポート関数があるようなのですが、PHPには、何かデータフォーマットを柔軟に読み込んでくれる書き方はありますでしょうか?
自分で試した事
foo.php
1ini_set('display_errors', "On"); 2$json= file_get_contents('hoge.json'); 3$data_list = json_decode($json, true); 4foreach ($data_list as $data) { 5 echo $data['text'] .PHP_EOL; 6}
エラー文
Warning: Invalid argument supplied for foreach() in /var/www/html/tera.php on line 5
読みこむJSON(仮)ファイル内の、全体を
str_replaceでダブルクオートに置換して、シングルクオート(だった箇所のみ)エスケープするですとか、、、
なんなり方法はありそうですが、よりスマートな方法をご教授くださいませ。
このファイル形式を正しくはなんと言うのかも、合わせてご指導頂けると嬉しいです。
宜しくお願い致します。
その後試した事
無理やり置換処理。しかし、文字列にクオートが混ざった段階で、どこかで破たんする
foo.php
1$content=str_replace("\"","'",$content); 2$content=str_replace("{'","{\"",$content); 3$content=str_replace("': ","\": ",$content); 4$content=str_replace(": '",": \"",$content); 5$content=str_replace("'}","\"}",$content); 6$content=str_replace("', 'start","\", \"start",$content); 7$content=str_replace("', 'text","\", \"text",$content); 8$content=str_replace("', 'duration","\", \"duration",$content); 9$content=str_replace(", 'start",", \"start",$content); 10$content=str_replace(", 'text",", \"text",$content); 11$content=str_replace(", 'duration",", \"duration",$content); 12$content=str_replace("\'","'",$content); 13$content=str_replace(",'",",\"",$content); 14$content=str_replace("}, {","},\n {",$content);
回答1件
あなたの回答
tips
プレビュー