Правильный способ создания данных JSON с PHP / MySQL - PullRequest
8 голосов
/ 02 июня 2011

Обновлено на основе ответов ниже:

На основе ответов ниже, у меня теперь есть следующий скрипт PHP:

header('Content-type:application/json');

function getdata($the_query)
{
    $connection = mysql_connect('server', 'user', 'pass') or die (mysql_error());
    $db = mysql_select_db('db_name', $connection) or die (mysql_error());

    $results = mysql_query($the_query) or die(mysql_error());

    header('Content-type:application/json');

    $the_data['rss']['channels']['title'] = $title;
    $the_data['rss']['channels']['link'] = $link;
    $the_data['rss']['channels']['description'] = $description;

    while($row = mysql_fetch_array($result))
    {
        extract($row);

        $the_data['rss']['channels']['items']['title'] = $item_title;
        $the_data['rss']['channels']['items']['link'] = "$item_link;
        $the_data['rss']['channels']['items']['date'] = $item_date;
        $the_data['rss']['channels']['items']['description'] = $item_description;
    }   

    mysql_close($connection);

    return json_encode($the_data);
}

, который возвращает следующее:

{
    "rss":
    {
        "channels":
        {
            "title":"title goes here",
            "link":"link goes here",
            "description":"description goes here",
            "items":
            {
                "title":"'title goes here",
                "link":"link goes here",
                "date":"date goes here",
                "description":"description goes here"
            }
        }
    }
}

Должно быть возвращено много элементов в зависимости от количества строк, возвращенных из базы данных. Почему я получаю только 1 элемент?

Ответы [ 2 ]

10 голосов
/ 02 июня 2011

попробуйте это:

<?php
$channel = array(
     'title' => 'title goes here',
     'link' => 'link here',
     'description' => 'description',
     'items' => array()
);
while($row = mysql_fetch_array($results))
{
    extract($row);
    $channel['items'][] = array(
        'title' => $title,
        'link' => $link,
        'guid' => $guid,
        'pubDate' => $date,
        'description' => $description
    );
}   
$channels = array($channel);
$rss = (object) array('rss'=> array('channels'=>$channels));
$json = json_encode($rss);
echo $json;

?>
1 голос
/ 02 июня 2011

Да, это должно быть довольно просто, что-то вроде

$the_data['rss']['channels']['title'] = $title;
$the_data['rss']['channels']['link'] = $link;
$the_data['rss']['channels']['description'] = $desc;

, а затем внутри вашего цикла while вы можете иметь

$the_data['rss']['channels']['items'][] = $row;

и, наконец, кодировать массив,

json_encode($the_data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...