【问题标题】:How do you correctly encode JSON from MYSQL, ready for Highcharts您如何正确编码来自 MYSQL 的 JSON,为 Highcharts 做好准备
【发布时间】:2023-03-15 20:02:01
【问题描述】:

我正在尝试做我认为相当简单的任务,但我做这件事做噩梦。 我想要一个从 mysql 结果生成的 Highcharts 条形图/样条图。 我已经制作了许多基于单一结果的 Highcharts,但我正在努力从结果列中填充整个系列。

开始,我有一个包含 4 个字段的 mysql 视图。键、日期、位置和等级

Example Data
Key             date          pos          rating
1026         2013-06-22        7            77.5
1021         2013-05-16        9            65.4
1019         2013-04-21        4            82.5
1002         2013-03-12        5            81.4

我试图在 x 轴上获取日期,将 pos 作为条形系列,并将评级作为样条系列。 在查看了为什么无法显示图表后,我发现我需要事先使用 JSON 准备数据。这是我完全迷路的地方...... 我以前从未使用过 JSON,也找不到任何可以使用 mysql 遵循的简单示例,所以请有人帮忙。我敢肯定只有大约 10 行代码在做我的疯子:)

我尝试使用的查询是...

$sql = "SELECT key, date, pos, rating FROM results WHERE key=146";

我想我已经用这个回应了一个 JSON

<?php
$sql = "SELECT key, date, pos, rating FROM results WHERE key=146";   
$result = mysql_query($sql);
$json = array();
if(mysql_num_rows($result)){
while($row=mysql_fetch_row($result)){
$json['JSON_info'][]=$row;
}
}
mysql_close($worstat);
echo json_encode($json);
?>

这给了我以下我认为接近我需要的输出,但进一步阅读告诉我我需要删除所有语音标记......

{"JSON_info":[["146","2013-06-23","7","66.15"],["146","2013-06-09","4","77.12"],
["146","2013-05-05","6","81.95"],["146","2013-04-07","11","77.15"],["146","2012-12-
30","6","58.17"],["146","2012-12-09","5","42.58"],["146","2012-10-07","7","74.66"],["146","2012-
09-16","18","78.86"],["146","2012-09-16","17","79.87"],["146","2012-09-16","15","80.23"],
["146","2012-09-16","20","72.32"],["146","2012-08-12","9","57.58"],["146","2012-07-
01","19","80.09"],["146","2012-06-03","7","51.64"],["146","2012-06-02","8","81.37"],["146","2012-
04-01","10","80.66"],["146","2012-02-05","9","64.08"]]}

查看 Highcharts 的演示图表,我看到图表需要这样的数据...

series: [{
name: 'Rainfall',
color: '#4572A7',
type: 'column',
yAxis: 1,
data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4],
tooltip: {
valueSuffix: ' mm'
}

在我迷失方向之前,有人可以给我一些指示。

  1. 如何去除语音标记?
  2. 然后如何删除用于结果过滤的不需要的关键字段?
  3. 如何将其分配给图表系列?

并不是说它会有所帮助,但我的示例页面位于:http://www.kr3w.co.uk/WORStat_2/profile.php?TargetName=146 它的第 5 个图表没有打球

【问题讨论】:

  • 显示绘制图表所需的格式
  • 我假设您在引用时遇到问题,因为根据您的 JSON,highcharts 将数字视为字符串。如果您能确认这是问题所在,那将是向前迈出的一步。
  • 我在图表示例中的 sn-p 中进行了编辑。
  • 那么您需要来自 sn-p 的哪个键? data 一个?
  • 注:从其他人告诉我的情况来看,我认为这是问题所在。我不能确定,因为我以前从未使用过这种方法来输出图表。

标签: php mysql json highcharts


【解决方案1】:

基本上,问题归结为未发送正确的数据类型。此外,您使用的是过时的 mysql_* 扩展,您应该考虑使用 PDO。

产生问题的那一行是:

while($row=mysql_fetch_row($result)){
    $json['JSON_info'][]=$row;
}

应该是这样的:

$json['JSON_info'][] = array(
    (int)$row['Key'],
    $row['date'],
    (int)$row['pos'],
    (float)$row['rating']
);

这将使json_encode 正确引用(或不引用)这些值。

【讨论】:

  • 我现在看到你是如何从 mysql 中将它们与单位类型一起拉入的,但是当我 echo json_encode($json); 我现在只得到响应 {"JSON_info":[[0,null,0,0]]}。我应该用另一种方式来查看完整的阵列,还是应该现在就开始拔头发并完成它嘿嘿:)
  • 我有一个错字,你复制粘贴了这个例子(这总是一个坏主意)。而不是$result,它应该是$row。我会编辑它,但请记住 - 永远不要复制粘贴,因为我们都是人类 :)
  • 没问题,我不会发现 sry :) echo json_encode($json); 仍然给我同样的回复 {"JSON_info":[[0,null,0,0]]}
【解决方案2】:

虽然我希望你现在已经想通了,但上面的那个人大部分是正确的,但他没有提到你需要改变

while($row=mysql_fetch_row($result)){

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

所以最终的代码是

while($row=mysql_fetch_array($result)){
    $json['JSON_info'][] = array(
    (int)$row['Key'],
    $row['date'],
    (int)$row['pos'],
    (float)$row['rating']
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 2018-08-19
    • 2014-07-10
    • 2013-07-09
    • 1970-01-01
    相关资源
    最近更新 更多