【问题标题】:MySQL to JSON (For use with NVD3.js)MySQL 到 JSON(用于 NVD3.js)
【发布时间】:2014-05-05 20:52:26
【问题描述】:

我正在尝试导出下面的 MySQL 表:

id, asof, value
abc, 2013-06-30, 36000000
abc, 2013-12-31, 48000000
abc, 2014-01-31, 51000000
abc, 2014-02-28, 56000000
xyz, 2013-06-30, 26000000
xyz, 2013-12-31, 33000000
xyz, 2014-01-31, 33000000
xyz, 2014-02-28, 36000000

转换成以下 json 格式用于 nvd3.js 图表:

[ 
    { 
      "key" : "abc" , 
      "values" : [ [ 2013-06-30, 36000000] , [ 2013-12-31, 48000000] , [ 2014-01-31, 51000000] , [ 2014-02-28, 56000000]
    },
    { 
      "key" : "xyz" , 
      "values" : [ [ 2013-06-30, 26000000] , [ 2013-12-31, 33000000] , [ 2014-01-31, 33000000] , [ 2014-02-28, 36000000]
    }
]

我确定这是一个新手问题,但我正在努力解决这个问题。任何指导将不胜感激!

编辑:

我目前一直在尝试使用数组和 while 语句,但无法弄清楚如何修改数组以使其可以输出为正确的 json 格式。

$query= mysqli_query($db,"SELECT id, asof, value
                          FROM table;"
                        );

if ( ! $query) {
        echo mysqli_error();
        die;
    }

$rows = array();

while($r = mysqli_fetch_assoc($query)) {
    $rows[] = $r;
}

print json_encode($rows);

【问题讨论】:

  • 您尝试使用的代码在哪里?
  • 我已更新问题以表明我在尝试什么。

标签: php mysql json d3.js nvd3.js


【解决方案1】:

可能最直接的方法是创建一个多维数组,用从数据库中获取的数据填充它,然后使用 json_encode 创建一个 JSON 字符串,然后将其发送到客户端。

这是一个简单的函数示例,该函数将接受一个项目数组并以预期格式返回一个 JSON 字符串。为简单起见,假设数据是一个包含三列的二维数组,但您应该修改它以使用数据库查询返回的格式。

function convert($data) {

    $intermediate = array();

    // This intermediate steps is used just to group all rows with
    // the same key
    foreach($data as $item) {
        list($key, $date, $value) = $item;
        $intermediate[$key][] = array($date, $value);
    }

    $output = array();

    foreach($intermediate as $key => $values) {
        $output[] = array(
            'key' => $key,
            'values' => $values
        );
    }

    return $output;
}

由于您从数据库中获取数据,第一个 foreach 语句中的变量 $item 实际上可能是一个关联数组,因此您必须编写类似 $item['key'] 的内容来获取当前行中列的数据。

如果你想使用mysqli_fetch_assoc,那么你可以尝试通过以下方式调用函数convert

$conn = mysqli_connect('', '', '')
$query = 'SQL you wish to execute'
$result = mysqli_query($conn, $query)

if($result) {
    $jsonData = convert($result);
}

但是,函数本身需要一点改变

function convert($result) {

    $intermediate = array();

    while($item = mysqli_fetch_assoc($result)) {
        $key = $item['id'];
        $date = $item['asof'];
        $value = $item['value'];
        $intermediate[$key][] = array($date, $value);
    }

    // The rest of the function stays the same
}

【讨论】:

  • 感谢您的回复@hgazibara,我认为您让我走上了正确的轨道,但我正在努力实施它。当我在查询中使用mysqli_fetch_assoc() 时,我会从数据库中返回一个关联数组:array (size=3) 'id' => string 'abc' (length=3) 'asof' => string '2013-06-30' (length=10) 'value' => string '36000000' (length=11)
猜你喜欢
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多