如何从json中仅获取数字键值对
Posted
技术标签:
【中文标题】如何从json中仅获取数字键值对【英文标题】:How to get only numerical key value pair from 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 格式。
【参考方案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.aspx和https://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/
【讨论】:
以上是关于如何从json中仅获取数字键值对的主要内容,如果未能解决你的问题,请参考以下文章
Concat json to promise:如何从promise挂起的json对象中获取额外的键值对
使用 Jquery SerializeArray() 获取 JSON 键值对