让我以此开头作为我的序言,我知道在这里(例如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)
答案 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