2016-03-31 3 views
2

У меня, вероятно, есть простая проблема с генерацией собственного вывода JSON в PHP. Я использую следующий код для сбора соответствующей формы данных из базы данных mysql.Правильный формат JSON с PHP

<?php 
header('Content-Type: application/json'); 
$mysqli = new mysqli("localhost", "root", "", "civitas"); 
if (!$mysqli->set_charset("utf8")) { 
     printf("Error loading character set utf8: %s\n", $mysqli->error); 
     exit(); 
} 
$events = array(); 

if ($result = $mysqli->query("SELECT title_hu FROM `events`")) { 
    while ($row = $result->fetch_assoc()) { 
     $events[] = $row; 
    } 
    echo json_encode($events, JSON_PRETTY_PRINT); 
} 
$result->close(); 
$mysqli->close(); 

код генерирует следующий вывод:

[ 
    { 
     "title_hu": "Zr\u00ednyi napok s", 
     "created_at": "2015-08-31 16:26:23" 
    }, 
    { 
     "title_hu": "Persona Non Grata 25. sz\u00fclet\u00e9snapi koncert", 
     "created_at": "2015-08-31 18:12:25" 
    }, 
    { 
     "title_hu": "Bek\u00f6lt\u00f6z\u0151s buli", 
     "created_at": "2015-08-31 18:22:29" 
    }, 
    { 
     "title_hu": "as", 
     "created_at": "2015-08-31 18:29:13" 
    }, 
    { 
     "title_hu": "dddd", 
     "created_at": "2015-08-31 18:29:58" 
    } 
] 

Но для инструмента я использую формат должен быть таким:

{ 
    "events":[{ 
      "title_hu":"Teszt hír", 
      "content":" lorembalblalba ", 
      "created_at":"2015-08-31 18:29:58" 
     }, 
     { 
      "title_hu":"Teszt hír2", 
      "content":" lorembalblalba ", 
      "created_at":"2015-08-31 18:29:58" 
     }, 
     { 
      "title_hu":"Teszt hír3", 
      "content":" lorembalblalba ", 
      "created_at":"2015-08-31 18:29:58" 
     } 
    ] 
} 

Я попытался поместить результат в другой массив, но в этом случае вывод JSON возвращает только первый элемент набора данных.

Что я делаю неправильно?

+1

Вы можете попробовать с '$ событий [ 'события'] [] = $ строки,' внутри цикла и не забудьте объявить '$ events ['events']' как массив перед циклом. – prava

+1

, так что это 'json_encode (array ('events' => $ events), JSON_PRETTY_PRINT);' не работает для вас? –

ответ

3

Сначала измените запрос

SELECT title_hu,content,created_at FROM `events` 

И для создания JSON использовать

$rows = array();// define array 
$events = array();// define array 
while ($row = $result->fetch_assoc()) { 
     $events[] = $row;// assign table data to array 
    } 
$rows['events'] = $events;// assign your table data and array to an empty array 
echo json_encode($rows, JSON_PRETTY_PRINT);// your final JSON 
0
<?php 
header('Content-Type: application/json'); 
$mysqli = new mysqli("localhost", "root", "", "civitas"); 
if (!$mysqli->set_charset("utf8")) { 
     printf("Error loading character set utf8: %s\n", $mysqli->error); 
     exit(); 
} 
$events = array('events'=>array()); 

if ($result = $mysqli->query("SELECT title_hu, content, created_at FROM `events`")) { 
    while ($row = $result->fetch_assoc()) { 
     $events['events'][] = $row; 
    } 
    echo json_encode($events, JSON_PRETTY_PRINT); 
} 
$result->close(); 
$mysqli->close(); 

Это должно сделать трюк.

Смежные вопросы