2

我有这样的 Json 数据

{
   "info":[
      {
         "Name":"Noob Here",
         "Major":"Language",
         "Sex":"Male",
         "English":"15",
         "Japanese":"5",
         "Calculus":"0",
         "Geometry":"20"
      },
      {
         "Name":"Noob Here",
         "Major":"Calculus",
         "Sex":"Female",
         "English":"0.5",
         "Japanese":"40",
         "Calculus":"20",
         "Geometry":"05"
      }
   ]
}

我只需要获取值为数值数据的键值对。

预期产出

{
"English":"15",
"Japanese":"5",
"Calculus":"0",
 "Geometry":"20"
},
{
 "English":"0.5",
"Japanese":"40",
"Calculus":"20",
"Geometry":"05"
}

是否有任何插件或者我应该使用正则表达式为它编写长 jquery 代码?

4

5 回答 5

3

使用 jqueryisNumeric来查找是否为数字..然后使用对象和数组..您需要两个循环来获取对象...

干得好..

var finalObj={};  //this is final output object
var info = [];  //array to push to finalObj
$.each(data.info,function(i,v){
  var object={};
  $.each(v,function(i1,val1){
    if($.isNumeric(val1)){

        object[i1]=val1
    }
  });
  info.push(object);
});
finalObj['info']=info;
console.log(finalObj);

在这里摆弄

于 2013-03-21T07:04:32.340 回答
2

您可以解析该值,parseInt如果它是整数,则选择它。

test 等于要发布的 json 对象。

var obj = test.info[0];
for (var key in obj) {
if(!isNaN(parseInt(obj[key]))){
    alert(JSON.stringify(key));
         }
}

http://jsfiddle.net/btevfik/gQfAN/

于 2013-03-21T06:43:51.703 回答
2

您可以编写一个辅助函数。只需传入您的 Json 对象并遍历每个字段。正则表达式是直截了当的。

var regex = new RegExp("\d*\.?\d"); 
var result = regex.test("yourvalue");

如果结果为真,则为数字。编译你的结果并返回一个 Json 对象。

于 2013-03-21T06:57:11.470 回答
2

试试这个:

var data={
    "info":[
          {
             "Name":"Noob Here",
             "Major":"Language",
             "Sex":"Male",
             "English":"15",
             "Japanese":"5",
             "Calculus":"0",
             "Geometry":"20"
          },
          {
             "Name":"Noob Here",
             "Major":"Calculus",
             "Sex":"Female",
             "English":"0.5",
             "Japanese":"40",
             "Calculus":"20",
             "Geometry":"05"
          }
       ]
};
var newarr=[];


$(data.info).each(function(index,value){
    arr=new Object();
    $(Object.keys(value)).each(function(ind,val){
        if($.isNumeric(value[val]))
        {
            arr[val]=value[val];
        }
    });
    newarr.push(arr);

});
console.log(newarr);

小提琴 http://jsfiddle.net/RyVds/2/

检查Object.keys()阅读http://msdn.microsoft.com/en-us/library/ie/ff688127%28v=vs.94%29.aspxhttps://developer.mozilla.org/en-US/docs/JavaScript /参考/Global_Objects/对象/键

于 2013-03-21T07:06:17.133 回答
1

您可以遍历每个对象上的键并尝试 parseInt 值。如果它是一个字符串,它将返回 NaN。

for (var i = 0; i < obj.info.length; i++) {
  var tmp = {};
  keys = Object.keys(obj.info[i]);
  console.log(keys);
  for (var j = 0; j < keys.length; j++) {
    if (parseInt(obj.info[i][keys[j]])) {
      tmp[keys[j]] = obj.info[i][keys[j]];
    }
  }

完整代码在 jsfiddle 上:

http://jsfiddle.net/wXBKd/1/

于 2013-03-21T07:03:02.557 回答