#php #json
#php #json
Вопрос:
У меня есть следующие данные json:
{"total":{"count":68},"Messages":[
{"messageId":"32b","replyId":"b2744",
"meta":{"type":"TEXT","author":{"nickname":"Gayge","image":{"url":"https://sas.com/16.jpg","height":100,"width":100},"Category":"REGULAR"},"createdAt":1477065361,"details":{"Text":"this is just a test"},"tags":[],"Stats":{"upVoteCount":0,"replyCount":0}},
{"messageId":"33b","replyId":"b3744",
"meta":{"type":"TEXT","author":{"nickname":"jorf","image":{"url":"https://sas.com/17.jpg","height":100,"width":100},"Category":"REGULAR"},"createdAt":1477065361,"details":{"Text":"yet another test"},"tags":[],"Stats":{"upVoteCount":0,"replyCount":0}}
]}
Я хочу получить эти данные и проанализировать их как html следующим образом:
<li id="32b">
<p>this is just a test</p>
<span>BY:<img src="https://sas.com/16.jpg"> <b>Gayge</b></span>
</li>
<li id="33b">
<p>yet another test</p>
<span>BY:<img src="https://sas.com/17.jpg"> <b>jorf</b></span>
</li>
Я пытался написать этот код:
$str = file_get_contents("https://mypage.net/json.txt");
$data = json_decode($str,true);
$dom = new DOMDocument;
$dom->loadHTML($data);
$lis = $dom->getElementsByTagName('li');
foreach ($lis as $li) {
$li->appendChild($p);
$li->appendChild($span);
}
$final = $dom->saveHTML();
echo $final;
fclose($open_file);
но с этого момента я застрял и не могу понять, что дальше. Помогите, пожалуйста?
Спасибо.
Ответ №1:
JSON — это не HTML. Таким образом, вы не должны рассматривать это как таковое (например, не вызывать $dom->loadHTML($data);
PHP — отличный язык шаблонов, который позволяет быстро генерировать HTML. В вашем конкретном случае я бы сделал что-то вроде этого:
$str = file_get_contents("https://mypage.net/json.txt");
$data = json_decode($str,true);
foreach ($data['Messages'] as $msg) {
?>
<li id="<?= htmlspecialchars($msg['messageId']); ?>">
<p> <?=htmlspecialchars($msg['meta']['details']['Text']); ?></p>
<!-- The rest of your template goes here -->
</li>
<? } ?>
Если вы сделаете это. Обязательно экранируйте входные строки, чтобы защититься от XSS-атак с помощью htmlspecialchars().
Примечание: Этот подход не очень хорошо «масштабируется», если вы хотите сделать это со многими различными шаблонами html. В Интернете есть специальные движки шаблонов HTML для PHP, например, Twig — очень популярный из них.
Комментарии:
1. Я получил эту ошибку: Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный ‘as’ (T_AS), ожидающий ‘;’ в строке 22
2. вы имеете в виду FOREACH?
3. Вам следует попытаться отделить представление и логику от вашего приложения, как сказал @DaGardner.
4. @CainNuke да, исправил ошибку … имел в виду
foreach