通过PHP将MySQL转换为JSON

时间:2019-05-22 11:51:56

标签: php mysql json

让我以此开头作为我的序言,我知道在这里(例如here等页面)已经多次问过这个问题,我已经仔细阅读了每个答案并尝试了解决方法,但是一直空着json数组。

我有一个如下的mysql查询:

$myQuery = $wpdb->get_results('SELECT player_name, player_team, 
SUM(ruckContests) AS contests FROM afl_master 
WHERE player_team = "COLL" AND year = 2019 AND ruckContests > 0 
GROUP BY player_id ORDER BY contests DESC LIMIT 2');

此查询的输出如下:

Array ( [0] => stdClass Object ( [player_name] => Brodie Grundy [player_team] => COLL [contests] => 661 ) [1] => stdClass Object ( [player_name] => Mason Cox [player_team] => COLL [contests] => 51 ) )

我想要做的是将其转换为php中的以下json对象:

{
 player_name: "Brodie Grundy", 
 player_team: "COLL", 
 contests: 661
},
{
 player_name: "Mason Cox", 
 player_team: "COLL", 
 contests: 51
}

我已经使用here方法尝试过mysql_fetch_array()fetch_assoc(),但无济于事。我将不胜感激。


在评论中推荐的这种简单解决方案有效:

json_encode($myQuery)

3 个答案:

答案 0 :(得分:1)

$JsonData=array();
foreach($myQuery as $val){


            $JsonData[]='
               {
                 "player_name": "'.$val->player_name.'", 
                 "player_team": "'.$val->player_team.'", 
                 "contests": $val->contests 
               }
             ';
}
$expectedJson=implode(',',$JsonData);

答案 1 :(得分:1)

只需将结果转换为使用 fetch_array()或(数组)$ myQuery的数组,然后:

json_encode($myQuery);
json_last_error(); // to see the error

答案 2 :(得分:0)

您可以在单个SQL语句中执行此操作(为了更好地理解,我将其格式化为多行)。内部的Select语句将您的查询用作子查询,同时使用JSON_OBJECT生成每一行的JSON对象,最后使用GROUP_CONCAT将每一行与逗号合并,然后添加“ [“和”]“创建完美的JSON数组的最终结果。 (换句话说,除了 json_encode($ myQuery)之外,更简单的版本:)。)

SELECT CONCAT('[', 
    GROUP_CONCAT( 
        JSON_OBJECT( 
            'player_name',   player_name, 
            'player_team' ,  player_team, 
            'contests', contests) 
    ) , ']') as json  
FROM (
        SELECT  player_name,  player_team, SUM(ruckContests) as contests
        FROM afl_master 
        WHERE player_team = "COLL" AND year = 1995 AND ruckContests > 0 
        GROUP BY player_name, player_team 
        ORDER BY SUM(ruckContests) DESC 
        LIMIT 2 
) AS TT