从非典型的json数组中获取值

时间:2013-11-25 08:58:40

标签: javascript jquery arrays json

我有两个不同的json数组来连接。

var json_1 = [{
  acceleration: 15,
  cylinders:    4,
  displacement: 98,
  horsepower:   80,
  id:           90,
  model_year:   72,
  mpg:          28,
  name:         "dodge colt (sw)",
  origin:       1,
  weight:       2164
}, {
  acceleration: 14,
  cylinders:    8,
  displacement: 307,
  horsepower:   130,
  id:           80,
  model_year:   72,
  mpg:          13,
  name:         "chevrolet chevelle concours (sw)",
  origin:       1,
  weight:       4098
}];


var json_2 = [{
  color:  'name',
  number: "id",
  x:      "cylinders",
  y:      "horsepower"
}];

接下来我将json_1和json_2连接起来。

    $.concat||$.extend({concat:function(b,c){var a=[];
    for(x in arguments)a=a.concat(arguments[x]);return a;}});

var data = $.concat(json_1, json_2);

现在非常有趣。我想使用json_2中的key值来获取数据的值。 首先,我定义了varisble一种颜色

var color =  data[data.length - 1].color;

结果我可以看到

console.log("RESULT!!!! value from color is name", data.map(function(d) {
  return d[color];
})); // solution ["dodge colt (sw)", "chevrolet chevelle concours (sw)"] 

我的问题是,如何更聪明地写var color = data[data.length - 1].color;以获得解决方案["dodge colt (sw)", "chevrolet chevelle concours (sw)"]

Here is my DEMO :)

2 个答案:

答案 0 :(得分:1)

您应该使用jQuery.parseJSON()来解析您的JSON字符串。

var jsonObj = $.parseJSON(''); // Insert your JSON string
var color = jsonObj.color;

答案 1 :(得分:1)

我认为你不需要concat,如果你使用像这样的对象

会更好
var obj = {data:json_1, aliases:json_2[0]}

而不是

var color = obj.aliases.color;
obj.data.map(function(d) {
    return d[color];
}) // solution ["dodge colt (sw)", "chevrolet chevelle concours (sw)"]

但如果你仍然想使用concat,你可以做这样的事情

data.map(function(d) {
    return d[color];
}).filter(function(_){return _ !== undefined})); // solution ["dodge colt (sw)", "chevrolet chevelle concours (sw)"]

data.slice(0,data.length-1).map(function(d) {
    return d[color];
}) // solution ["dodge colt (sw)", "chevrolet chevelle concours (sw)"]