【问题标题】:MySQL to JSON via PHPMySQL 到 JSON 通过 PHP
【发布时间】:2019-05-22 11:51:56
【问题描述】:

让我以我知道这个问题在这里被问过很多次(即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
}

我已经尝试mysql_fetch_array()fetch_assoc() 使用here 方法,但无济于事。如有任何帮助,我将不胜感激。


在 cmets 中推荐的这个简单的解决方案奏效了:

json_encode($myQuery)

【问题讨论】:

  • 试试json_encode($myQuery)
  • 天哪,就是这么简单。我试图对其进行预处理,然后使用 json_encode()。非常感谢。

标签: php mysql json


【解决方案1】:
$JsonData=array();
foreach($myQuery as $val){


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

【讨论】:

    【解决方案2】:

    只需使用 fetch_array() 或 (array) $myQuery 将结果转换为数组:

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

    【讨论】:

      【解决方案3】:

      您可以在单个 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
      

      【讨论】:

        猜你喜欢
        • 2013-11-19
        • 2023-03-15
        • 2020-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-14
        • 1970-01-01
        相关资源
        最近更新 更多