使用jquery将json转换为数组


convert json to array using jquery

我的php的结果是

     $result = '[{"MFG_NAME":"ABC","CONCATED_MKT_SHARE":"01-MAR-14|0.59"},{"MFG_NAME":"XYZ","CONCATED_MKT_SHARE":"01-MAR-14|0.87"},{"MFG_NAME":"ABC","CONCATED_MKT_SHARE":"01-APR-14|0.25"},{"MFG_NAME":"XYZ","CONCATED_MKT_SHARE":"01-APR-14|0.67"},{"MFG_NAME":"ABC","CONCATED_MKT_SHARE":"01-MAY-14|0.10"},{"MFG_NAME":"XYZ","CONCATED_MKT_SHARE":"01-MAY-14|0.03"}]';

并对其进行json解析

    var data = new Array();
     data = JSON.parse('<?php echo $result ; ?>');

我将如何获得的输出

   MFG_NAME[0] = ABC;
   MFG_NAME[1] = XYZ;
   DATE[0] = [01-MAR-14,01-APR-14,01-MAY-14];
   DATE[1] = [01-MAR-14,01-APR-14,01-MAY-14];
   MKT[0] = [0.59,0.25,0.10];
   MKT[1] = [0.87,0.67,0.03];

循环data,构建您的数组。首先使用indexOf()检查您是否已经有了匹配的MFG_NAME。如果有匹配项,请将该索引用于其他数组。否则,为每个变量创建新条目。

var data = [
    { MFG_NAME: "ABC", CONCATED_MKT_SHARE: "01-MAR-14|0.59" },
    { MFG_NAME: "XYZ", CONCATED_MKT_SHARE: "01-MAR-14|0.87" },
    { MFG_NAME: "ABC", CONCATED_MKT_SHARE: "01-APR-14|0.25" },
    { MFG_NAME: "XYZ", CONCATED_MKT_SHARE: "01-APR-14|0.67" },
    { MFG_NAME: "ABC", CONCATED_MKT_SHARE: "01-MAY-14|0.10" },
    { MFG_NAME: "XYZ", CONCATED_MKT_SHARE: "01-MAY-14|0.03" }
];
var MFG_NAME = [];
var DATE = [];
var MKT = [];
data.forEach(function(item) {
    var parts = item.CONCATED_MKT_SHARE.split("|");
    var i = MFG_NAME.indexOf(item.MFG_NAME);
    if (i == -1) {
        MFG_NAME.push(item.MFG_NAME);
        DATE.push([parts.shift()]);
        MKT.push([+parts.shift()]);
    }
    else {
        DATE[i].push(parts.shift());
        MKT[i].push(+parts.shift());
    }
});
var success = MFG_NAME[0] == "ABC" &&
    MFG_NAME[1] == "XYZ" &&
    DATE[0].join(",") == "01-MAR-14,01-APR-14,01-MAY-14" &&
    DATE[1].join(",") == "01-MAR-14,01-APR-14,01-MAY-14" &&
    MKT[0].join(",") == "0.59,0.25,0.1" &&
    MKT[1].join(",") == "0.87,0.67,0.03";
document.write(success);

这要求您的数据按日期排序。您的样本数据已经按日期和名称排序。如果按名称然后按日期排序,或者只按日期排序而不考虑名称,这仍然有效但是,如果它根本没有按日期排序,则需要先执行额外的排序步骤(这将是低效的),或者在处理数据时调整代码以进行排序。

$result = '[{"MFG_NAME":"ABC","CONCATED_MKT_SHARE":"01-MAR-14|0.59"},{"MFG_NAME":"XYZ","CONCATED_MKT_SHARE":"01-MAR-14|0.87"},{"MFG_NAME":"ABC","CONCATED_MKT_SHARE":"01-APR-14|0.25"},{"MFG_NAME":"XYZ","CONCATED_MKT_SHARE":"01-APR-14|0.67"},{"MFG_NAME":"ABC","CONCATED_MKT_SHARE":"01-MAY-14|0.10"},{"MFG_NAME":"XYZ","CONCATED_MKT_SHARE":"01-MAY-14|0.03"}];';
var_dump(json_decode($result, true));

也许这是你的解决方案?!

我想这就是您想要的:

var $result = '[{"MFG_NAME":"ABC","CONCATED_MKT_SHARE":"01-MAR-14|0.59"},{"MFG_NAME":"XYZ","CONCATED_MKT_SHARE":"01-MAR-14|0.87"},{"MFG_NAME":"ABC","CONCATED_MKT_SHARE":"01-APR-14|0.25"},{"MFG_NAME":"XYZ","CONCATED_MKT_SHARE":"01-APR-14|0.67"},{"MFG_NAME":"ABC","CONCATED_MKT_SHARE":"01-MAY-14|0.10"},{"MFG_NAME":"XYZ","CONCATED_MKT_SHARE":"01-MAY-14|0.03"}]';
    var data = new Array();
    data = JSON.parse($result);
    var MFG_NAME = new Array();
    var DATE = new Array();
    var MKT = new Array();
    var i = 0;
    $.each( data, function( key, value ) {
        MFG_NAME[i] = value.MFG_NAME;
        var MKT_SHARE = value['CONCATED_MKT_SHARE'].split('|');
        DATE[i] = MKT_SHARE[0];
        MKT[i] = MKT_SHARE[1];
        i++;
    });
    console.log(MFG_NAME[0]);
    console.log(MFG_NAME[1]);
    console.log(MFG_NAME);
    console.log(DATE);
    console.log(MKT);

演示:http://jsfiddle.net/1n51kwze/

var MFG_NAME = [];
var DATE = [];
var MKT = [];
//For each data entry
for(i = 0; i < data.length; i++){
    concatString = data[i]["CONCATED_MKT_SHARE"].split("|");
    //If name not exists create date and mkt object for name instance
    if(MFG_NAME.indexOf(data[i]["MFG_NAME"]) == -1){
        MFG_NAME[i] = data[i]["MFG_NAME"];
        DATE[i] = [];
        MKT[i] = [];
        DATE[i].push(concatString[0]);
        MKT[i].push(concatString[1]);   
    }else{
        //Else just add to existing
        DATE[MFG_NAME.indexOf(data[i]["MFG_NAME"])].push(concatString[0]);
        MKT[MFG_NAME.indexOf(data[i]["MFG_NAME"])].push(concatString[1]);   
    }
}   
    console.log(MFG_NAME[0]);
    console.log(MFG_NAME[1]);
    console.log(DATE[0]);
    console.log(DATE[1]);
    console.log(MKT[0]);
    console.log(MKT[1]);

结果如下:

ABC
XYZ
["01-MAR-14", "01-APR-14", "01-MAY-14"]
["01-MAR-14", "01-APR-14", "01-MAY-14"]
["0.59", "0.25", "0.10"]
["0.87", "0.67", "0.03"]

希望这有帮助:)

你可以这样做:

var data = [{"MFG_NAME":"ABC","CONCATED_MKT_SHARE":"01-MAR-14|0.59"},{"MFG_NAME":"XYZ","CONCATED_MKT_SHARE":"01-MAR-14|0.87"},{"MFG_NAME":"ABC","CONCATED_MKT_SHARE":"01-APR-14|0.25"},{"MFG_NAME":"XYZ","CONCATED_MKT_SHARE":"01-APR-14|0.67"},{"MFG_NAME":"ABC","CONCATED_MKT_SHARE":"01-MAY-14|0.10"},{"MFG_NAME":"XYZ","CONCATED_MKT_SHARE":"01-MAY-14|0.03"}];
var MFG_NAME = [],
    DATE = [],
    MKT = [];
for(var i = 0; i < data.length; i++){
    MFG_NAME.push(data[i].MFG_NAME);
    var split = data[i].CONCATED_MKT_SHARE.split("|");
    DATE.push(split[0]);
    MKT.push(split[1]);
}
alert("MFG_NAME:'n" + JSON.stringify(MFG_NAME) + "'n'n" +
      "DATE:'n" + JSON.stringify(DATE) + "'n'n" +
      "MKT:'n" + JSON.stringify(MKT));

正如您所看到的,这将导致3个新的数组包含您的数据,用键分隔。

哦,在添加属性之前不需要声明data

var data = JSON.parse('<?php echo $result ; ?>');