如何从 mysql 数据库构建 JSON 数组

Posted

技术标签:

【中文标题】如何从 mysql 数据库构建 JSON 数组【英文标题】:How to build a JSON array from mysql database 【发布时间】:2011-09-11 00:53:39 【问题描述】:

好的,我一直在绞尽脑汁尝试从 mysql 构建 JSON 数组。数组必须采用以下格式。我正在使用 fullcalendar 并希望使日历上的事件动态化。下面是构建数组的代码,但是目前没有从mysql获取信息

$year = date('Y');
$month = date('m');

echo json_encode(array(

    //Each array below must be pulled from database
        //1st record
        array(
        'id' => 111,
        'title' => "Event1",
        'start' => "$year-$month-10",
        'url' => "http://yahoo.com/"
    ),

         //2nd record
         array(
        'id' => 222,
        'title' => "Event2",
        'start' => "$year-$month-20",
        'end' => "$year-$month-22",
        'url' => "http://yahoo.com/"
    )

));

【问题讨论】:

【参考方案1】:

你想做这样的事情吗?

$return_arr = array();

$fetch = mysql_query("SELECT * FROM table"); 

while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) 
    $row_array['id'] = $row['id'];
    $row_array['col1'] = $row['col1'];
    $row_array['col2'] = $row['col2'];

    array_push($return_arr,$row_array);


echo json_encode($return_arr);

它以这种格式返回一个json字符串:

["id":"1","col1":"col1_value","col2":"col2_value","id":"2","col1":"col1_value","col2":"col2_value"]

或者是这样的:

$year = date('Y');
$month = date('m');

$json_array = array(

//Each array below must be pulled from database
    //1st record
    array(
    'id' => 111,
    'title' => "Event1",
    'start' => "$year-$month-10",
    'url' => "http://yahoo.com/"
),

     //2nd record
     array(
    'id' => 222,
    'title' => "Event2",
    'start' => "$year-$month-20",
    'end' => "$year-$month-22",
    'url' => "http://yahoo.com/"
)

);

echo json_encode($json_array);

【讨论】:

+1 击败了我。如果所有数据库列都是正确的名称,您应该能够删除分配并将 $row 推送到数组。 你为什么要创建$row_array?为什么不SELECT id, title, '$year-month-10' as start,url FROM table,直接$return_arr[] = $row; @Kevin,是的,你是对的。我实际上很快从一个自动完成示例中提取了这个,我必须为数组值分配不同的名称。所以 +1 就在你身边! 是的,一个人在写一个时没有收到另一个评论待处理的警报:) 我还是没明白。数组必须完全如上所示,否则信息不会显示在日历上。【参考方案2】:

PDO 解决方案,只是为了更好的实现然后mysql_*

$array = $pdo->query("SELECT id, title, '$year-month-10' as start,url 
  FROM table")->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($array);

另一个不错的特点是它将整数保留为整数而不是字符串。

【讨论】:

PDO 是当今 php 连接各种数据库的 事实标准,MySQL 就是其中之一。仍然在恕我直言中使用 mysql-extension 与仍然制作 html 3.2 页面一样糟糕。如果您的项目真的需要它,请继续,但新代码应该与它无关,如果不是PDO,至少使用mysqli(注意:'i'代表改进)。 我必须使用 mysql,因为我无法使用其他的。 我一直在玩 PDO。感谢您推动实际更新我的一些代码。它已经到位并在一些较旧的代码上运行。谢谢。【参考方案3】:

Mysqli 用户的更新:

$base= mysqli_connect($dbhost,  $dbuser, $dbpass, $dbbase);

if (mysqli_connect_errno()) 
  die('Could not connect: ' . mysql_error());

$return_arr = array();

if ($result = mysqli_query( $base, $sql ))
    while ($row = mysqli_fetch_assoc($result)) 
    $row_array['id'] = $row['id'];
    $row_array['col1'] = $row['col1'];
    $row_array['col2'] = $row['col2'];

    array_push($return_arr,$row_array);
   
 

mysqli_close($base);

echo json_encode($return_arr);

【讨论】:

我尝试了 pdo 和 sqli,但我无法让数组正确记录。您正在使用echo json_encode($array);,它对我不起作用,但Echo $json->encode($arr); 对我起作用......为什么?我使用mysql_query 并创建一个mysql_fetch_object【参考方案4】:

使用这个

$array = array();
$subArray=array();
$sql_results = mysql_query('SELECT * FROM `location`');

while($row = mysql_fetch_array($sql_results))

    $subArray[location_id]=$row['location'];  //location_id is key and $row['location'] is value which come fron database.
    $subArray[x]=$row['x'];
    $subArray[y]=$row['y'];


 $array[] =  $subArray ;

echo'"ProductsData":'.json_encode($array).'';

【讨论】:

以上是关于如何从 mysql 数据库构建 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章

Chart.js 数据数组使用 PHP、MySQL。如何从 JSON 数组定义数据源?

如何从 mySQL 和 PHP 检索结果为多维数组?

如何从 MySQL 中提取 JSON 数组

如何将json数组插入mysql数据库

如何将 SQL 数据映射到 Java JSON 对象和 JSON 数组?

如何从 json 对象构建数组