【问题标题】:How to get only numerical key value pair from json如何从json中仅获取数字键值对
【发布时间】:2013-03-10 13:43:38
【问题描述】:

我有一个这样的 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 代码?

【问题讨论】:

  • 你是如何生成这个json的?你能把那个代码放上去吗?
  • 它只是硬编码的 json 文件。
  • 我不认为有任何插件。您将不得不遍历 json 列表并删除不需要的项目
  • 顺便说一句,JSON 可以本地存储数字,您不必将它们存储为字符串,例如"English": 0.5(数字周围没有引号)。如果您能够自己在 JSON 文件中执行此操作,则只需使用 typeof value === 'number' 在 JavaScript 中识别它们。
  • 您不需要为数字加上引号。你可以简单地写它们而不带引号。这似乎不是有效的 json 格式。

标签: javascript jquery regex json


【解决方案1】:

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

给你..

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);

fiddle here

【讨论】:

    【解决方案2】:

    您可以编写一个辅助函数。只需传入您的 Json 对象并遍历每个字段。正则表达式很简单。

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

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

    【讨论】:

      【解决方案3】:

      试试这个:

      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/Reference/Global_Objects/Object/keys

      【讨论】:

        【解决方案4】:

        您可以使用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/

        【讨论】:

          【解决方案5】:

          您可以遍历每个对象上的键并尝试解析值。如果它是一个字符串,它将返回 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/

          【讨论】:

            猜你喜欢
            • 2021-03-13
            • 2018-05-13
            • 1970-01-01
            • 1970-01-01
            • 2019-04-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-07-07
            相关资源
            最近更新 更多