从json创建javascript对象(带密钥对)(不是正确的密钥对)

时间:2013-08-21 23:47:27

标签: javascript json d3.js

我不知道如何从json数组中提取键/值以将它们挂钩到javascript数组的不同部分。

E.g。我有2个json数组,如下所示:

系列1:

{"label1":"91970","label2":"1231", ...  "labeln": "somenumbers".}

系列2:

{"label1":"4556","label2":"3434", ....}

我想将它们转换为1个javascript对象(用于nvd3绘图),如下所示:

long_short_data = [ 
  {
    key: 'Series1',
    color: '#d62728',
    values: [
      { 
        "cell" : "label1" ,
        "value" : 91970
      } , 
      { 
        "cell" : "label2" ,
        "value" : 1231
      } ,
.....
    ]
  },
  {
    key: 'Series2',
    color: '#1f77b4',
    values: [
      { 
        "cell" : "label1" ,
        "value" : 4556
      } , 
      { 
        "cell" : "label2" ,
        "value" : 3434
      } , 
 ...
      }
    ]
  }
];

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

给定一个JSON字符串,您应该先调用JSON.parse()将其转换为Javascript对象。

然后,您可以使用函数Object.keys(obj)返回直接属于obj的属性数组来构建数组:

var array = [];
for (var ii = 0, keys = Object.keys(series); ii < keys.length; ii++) {
    array.push({ cell : keys[ii], value : series[keys[ii]] });
}

答案 1 :(得分:0)

您可以考虑使用d3.keys,例如:

var series1 = {"label1":"91970","label2":"1231","labeln": "453453"};
var series2 = {"label1":"4556","label2":"3434"};
var long_short_data = [ 
  {
    key: 'Series1',
    color: '#d62728',
    values: []
  },
  {
    key: 'Series2',
    color: '#1f77b4',
    values: []
  }
];
d3.keys(series1).forEach(function(d) { 
    long_short_data[0].values.push(
      { 
        "cell" : d ,
        "value" : +series1[d]
      }
    );
});
d3.keys(series2).forEach(function(d) { 
    long_short_data[1].values.push(
      { 
        "cell" : d ,
        "value" : +series2[d]
      }
    );
});
将按照您的问题

中的定义创建

long_short_data