将json_encode数组转换为多维javascript对象以在Flot中使用

时间:2015-03-22 10:05:51

标签: json

我从现在开始一周就遇到了这个麻烦。我已经在stackoverflow和各种博客上阅读了很多关于我用Google搜索的主题,但我仍然需要你帮助解决这个问题。对于你们中的许多人来说,这是一个愚蠢的问题,所以我很抱歉,因为我对php / javascript语言知之甚少,但我处于学习阶段,我确信你会在这个形成过程中支持我路径。

我的主要问题是将json_encode输出数组转换为可以在javascript中使用的Flot中使用的内容。

我目前的PHP代码如下:

$csv_is_a = str_getcsv(file_get_contents('csv/IS_A.csv'));
$csv_is_q = str_getcsv(file_get_contents('csv/IS_Q.csv'));

for ($i=1, $k=12; $i<12, $k<22; $i++, $k++) {
    $JsonArray[] = array( $csv_is_a[$i] => $csv_is_a[$k]);
}
echo '<pre>';
print_r( $JsonArray );
echo '</pre>';

此代码的输出为:

Array (
    [0] => Array
        (
            [2005-09] => 13931
        )

    [1] => Array
        (
            [2006-09] => 19315
        )

    [2] => Array
        (
            [2007-09] => 24006
        )

    [3] => Array
        (
            [2008-09] => 32479
        )

    [4] => Array
        (
            [2009-09] => 42905
        )

    [5] => Array
        (
            [2010-09] => 65225
        )

    [6] => Array
        (
            [2011-09] => 108249
        )

    [7] => Array
        (
            [2012-09] => 156508
        )

    [8] => Array
        (
            [2013-09] => 170910
        )

    [9] => Array
        (
            [2014-09] => 182795
        )

)

现在我应用json_encode:

$csv_enc = json_encode( $JsonArray );

这个输出是:

[{"2005-09":"13931"},{"2006-09":"19315"},{"2007-09":"24006"},{"2008-09":"32479"},{"2009-09":"42905"},{"2010-09":"65225"},{"2011-09":"108249"},{"2012-09":"156508"},{"2013-09":"170910"},{"2014-09":"182795"}]

但我想要的是:

[[2005-09, 13931],[2006-09, 19315],[2007-09, 24006],[2008-09, 32479],[2009-09, 42905],[2010-09, 65225],[2011-09, 108249],[2012-09, 156508],[2013-09, 170910],[2014-09, 182795]]

在代码的javascript部分,我尝试以这种方式使用JSON.parse():

<script type="text/javascript">
var data = JSON.parse(<?php echo $csv_enc ;?>);

$(document).ready(function() {
    $.plot($("#placeholder"), [data]);
});
</script>

但它不起作用。如果我替换&#34; JSON.parse()&#34;使用二维对象,脚本可以正常工作。所以,麻烦应该只是在代码的那一部分。您的意见中的问题是什么? 感谢您的支持。

更新:

我已经使用了@callback建议的代码,但它不起作用。这是:

<script type="text/javascript">

var theArray = <?php echo $csv_enc; ?>, multiArray = [];

for(var i = 0 ; i< theArray.length ; i++){
    var obj = theArray[i];
    for( k in obj) {
        multiArray[i] = [k, parseInt(obj[k])];
     }
}
console.log(multiArray)

$(document).ready(function() {
    $.plot($("#placeholder"), [multiArray]);
});
</script>

console.log不打印任何内容......

1 个答案:

答案 0 :(得分:0)

考虑到theArray是您的输入数组(对象数组)而multiArray是您需要的数组数组,您可以这样做:

var theArray = [{"2005-09":"13931"},{"2006-09":"19315"},{"2007-09":"24006"},{"2008-09":"32479"},{"2009-09":"42905"},{"2010-09":"65225"},{"2011-09":"108249"},{"2012-09":"156508"},{"2013-09":"170910"},{"2014-09":"182795"}], multiArray = [];

for(var i = 0 ; i< theArray.length ; i++){
    var obj = theArray[i];
    for( k in obj) {
        multiArray[i] = [k, parseInt(obj[k])];
     }
}
console.log(multiArray)

这将按如下方式(在控制台中)打印您的数组:

[["2005-09", 13931],["2006-09", 19315],["2007-09", 24006],["2008-09", 32479], ...]

http://jsfiddle.net/1L344srv/

我不知道Flot是否关心multiArray中每个数组的第一个值中的引号,但因为它是一个字符串,所以应该没问题。