从json数据中选择特定键

时间:2014-06-23 16:34:13

标签: javascript json datatables

我有一个数组:

var cols = ["ticker", "highPrice", "lowPrice","lastPrice"] // dynamic

Json数据来自后端:

info = {ticker: "AAPL", marketCap: 2800000000, lowPrice: 42.72, highPrice: 42.84}

假设我想选择市值,那么我可以info.marketCap。但我想只选择那些键等于cols i.e. info.ticker, info.highPrice, info.lowPrice

的json值

并将N / A分配给json中未定义但存在于cols数组中的那些,即info.lastPrice = "N/A"

注意:cols不时变化

这是我到目前为止的内容

SyScreener.fillScreenerResult = function(info) {
        var cols = ["ticker", "highPrice", "lowPrice", "openPrice", "lastPrice", "currentVol", "avgVol"];
        var data = [];
        for(var i=0; i<info.length; i++) {
            var jsonKeys = Object.keys(info[i]);
            for(var j=0; j<jsonKeys.length; i++) {
                if(cols.contains(jsonKey[j])) {
                    // TODO something like - data.push([info[i].jsonKey[j])
                } else {
                    // TODO something like - info[i].colsValue = "N/A"
                }
            }
        }
        SyUtils.createDataTable("screener_result", data);   
    };

4 个答案:

答案 0 :(得分:1)

你是说这样的意思吗?

var cols = ["ticker", "highPrice", "lowPrice","lastPrice"];
info = {ticker: "AAPL", marketCap: 2800000000, lowPrice: 42.72, highPrice: 42.84};
for(var c = 0, clen = cols.length; c < clen; c++) {
  if( !(cols[c] in info) ) {
     console.log("N/A");
  }
  else {
    console.log(info[cols[c]]);
  }
}

演示:: jsFiddle

答案 1 :(得分:1)

我可能没有正确地阅读你的问题,但根据我的理解,我可能会建议这样的事情。

for (var i=0; i<cols.length; i++) {
    var fieldName = cols[i];
    if (!info.hasOwnProperty(fieldName)) {
        info[fieldName] = 'N/A';
    }
}

这只是遍历cols中的每个字段名称,并检查它是否是info JSON对象的属性。如果它尚未存在,则循环将为该属性添加值“N / A”。

答案 2 :(得分:0)

var cols = ["ticker", "highPrice", "lowPrice","lastPrice"]

var info = {ticker: "AAPL", marketCap: 2800000000, lowPrice: 42.72, highPrice: 42.84}

var output = {};
for(each in info) {
    var index = cols.indexOf(each)
    if(index != -1) {
        output[each] = info[each];
        //remove extra already checked element
        cols.splice(index,1)
    }
}
//append remaining keys
for(var i=0;i<cols.length;i++) {
    output[cols[i]] = "N/A"
}

console.log(output)
//output Object {ticker: "AAPL", lowPrice: 42.72, highPrice: 42.84, lastPrice: "N/A"} 

答案 3 :(得分:-1)

首先,您需要对JSON数据进行反序列化。 要使用jQuery执行此操作,请使用此处可以找到的函数parseJson http://api.jquery.com/jquery.parsejson/ 一旦你反序列化它,你可以用这些数据做任何你想做的事情,因为你把它作为一个普通的javascript数组来操作。希望这会有所帮助。