хотите прочитать данные из json в файл php

#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