在 Javascript 中遍历 JSON 对象
Traverse JSON object in Javascript?
下面是我的代码。 请帮我循环浏览它。 我想循环完整的 JSON 并进行一些验证,但我无法循环访问它。我是第一次这样做,如果有任何1可以帮助我,那就太好了。
有没有办法过滤 JSON 对象。 例如,我想搜索 Auditor1 ASGN 值。 过滤器可以是动态的,就像它可以是审计员 1 或审计员 11 一样。 我还想知道如何将上述 JSON 转换为数组。 这将使我的搜索变得容易(以防无法通过直接 JSON 搜索进行搜索(。
function fnMultiRowValidation(){
var vStatus = 5,
vJson = '{"tpaCo":[{"name":"Audit Company1",'
"aud":[{"name":"auditor1","asgn":"1","fnds":"1","lead":"1"},'
{"name":"auditor2","asgn":"1","fnds":"0","lead":"1"},'
{"name":"auditor3","asgn":"0","fnds":"1","lead":"0"},'
{"name":"auditor4","asgn":"1","fnds":"1","lead":"0"},'
{"name":"auditor5","asgn":"1","fnds":"1","lead":"0"},'
{"name":"auditor6","asgn":"0","fnds":"1","lead":"0"},'
{"name":"auditor7","asgn":"1","fnds":"1","lead":"0"},'
{"name":"auditor8","asgn":"1","fnds":"1","lead":"0"},'
{"name":"auditor9","asgn":"0","fnds":"1","lead":"0"},'
{"name":"auditor10","asgn":"1","fnds":"1","lead":"0"},'
{"name":"auditor11","asgn":"1","fnds":"1","lead":"0"}]},'
{"name":"Audit Company2",'
"aud":[{"name":"auditor3","asgn":"1","fnds":"1","lead":"1"},'
{"name":"auditor4","asgn":"1","fnds":"1","lead":"0"}'
]'
}'
]}';
var vObj = JSON.parse(vJson);
for (var i=0;i<vObj.tpaCo.length;i++){
$.each(vObj.tpaCo[i], function(key, value) {
console.log(key +':'+ value);
if(typeof(value)=='object'){
//console.log('Auditor length:'+vObj.tpaCo.value.length);
}
});
}
}
vObj.tpaCo.value.length
行不通。您要么必须使用 vObj.tpaCo[key].length
要么value.length
.对于初学者来说,您不应该将本机 for 循环与each
迭代混合使用。
和 for-in-loops:
for (var i=0; i<vObj.tpaCo.length; i++) { // iterate through outer array
for (var key in vObj.tpaCo[i]) { // enumerate item keys
console.log(key +':'+ vObj.tpaCo[i][key]); // logs "name" and "aud"
}
console.log('Auditor length:'+vObj.tpaCo[i].aud.length);
for (var j=0; j<vObj.tpaCo[i].aud.length; j++) { // iterate "aud" array
console.log(vObj.tpaCo[i].aud[j].name);
}
}
通过使用变量进行简化:
var tpacos = vObj.tpaCo;
for (var i=0; i<tpacos.length; i++) {
var comp = tpacos[i];
for (var key in comp) {
var value = comp[key];
console.log(key +':'+ value);
}
var auds = comp.aud;
console.log('Auditor length:'+auds.length);
for (var j=0; j<auds.length; j++) {
var aud = auds[j];
console.log(aud.name);
}
}
现在使用 Array forEach
方法:
vObj.tpaCo.forEach(function(comp, i) {
for (var key in comp) {
var value = comp[key];
console.log(key +':'+ value);
}
console.log('Auditor length:'+comp.aud.length);
comp.aud.forEach(function(aud, j) {
console.log(aud.name);
});
});
有了jQuery的each
:
$.each(vObj.tpaCo, function(i, comp) {
$.each(comp, function(key, value) {
console.log(key +':'+ value);
});
console.log('Auditor length:'+comp.aud.length);
$.each(comp.aud, function(j, aud) {
console.log(aud.name);
});
});
function fnMultiRowValidation(){
var vStatus = 5,
vJson = '{"tpaCo":[{"name":"Audit Company1",'
"aud":[{"name":"auditor1","asgn":"1","fnds":"1","lead":"1"},'
{"name":"auditor2","asgn":"1","fnds":"0","lead":"1"},'
{"name":"auditor3","asgn":"0","fnds":"1","lead":"0"},'
{"name":"auditor4","asgn":"1","fnds":"1","lead":"0"},'
{"name":"auditor5","asgn":"1","fnds":"1","lead":"0"},'
{"name":"auditor6","asgn":"0","fnds":"1","lead":"0"},'
{"name":"auditor7","asgn":"1","fnds":"1","lead":"0"},'
{"name":"auditor8","asgn":"1","fnds":"1","lead":"0"},'
{"name":"auditor9","asgn":"0","fnds":"1","lead":"0"},'
{"name":"auditor10","asgn":"1","fnds":"1","lead":"0"},'
{"name":"auditor11","asgn":"1","fnds":"1","lead":"0"}]},'
{"name":"Audit Company2",'
"aud":[{"name":"auditor3","asgn":"1","fnds":"1","lead":"1"},'
{"name":"auditor4","asgn":"1","fnds":"1","lead":"0"}'
]'
}'
]}';
var vObj = JSON.parse(vJson);
$.each(vObj.tpaCo, function(key, value) {
console.log(value.name);
});
}
删除 for 循环。使用此脚本
要获取 aud 元素,您需要在当前循环中有一个 $.each 函数
我很确定你可以摆脱for
循环,只使用
$.each( vObk.tpaCo, function(key, value) {
console.log(key + ':' + value);
//... do stuff with value ...
})
你的代码应该是这样的
$.each(vObj.tpaCo, function(key, value) {
console.log(key +':'+ value);
if(typeof(value)=='object'){
//console.log('Auditor length:'+vObj.tpaCo.value.length);
}
});
希望它有帮助.....
$.each(vObj.tpaCo, function(key, value) {
console.log(value.name+" ")
for(i=0; i<value.aud.length; i++)
console.log(value.aud[i]);
});
或者如果您不知道名字
$.each(vObj, function(key, value){
$.each(value, function(key, value){
for(val in value)
if(typeof val == 'string')
console.log(value[val]
else
for(i=0; i<value[val].length ; i++)
console.log(value[val][i]);
});
});
http://jsfiddle.net/GxER7/
相关文章:
- jQuery匹配JSON对象的部分文本
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 如何为json对象中的段发送array[]
- 将JSON对象传递给angular指令
- 更改JSON对象的结构
- 访问JSON对象内部的数组元素
- 在ejs-partial中对JSON对象进行迭代
- 遍历 JSON 对象并检查 URL 是否以某个值结尾
- 访问嵌套JSON对象的键,其中键是动态的
- json对象中缺少对象循环
- 发送json对象或使用express路由呈现视图
- 在play2框架中向json对象添加下拉列表项
- 元素名称上带有短划线 (-) 字符的 Json 对象
- autocomplete不接受源的json对象
- 如何在javascript中创建动态json对象
- 在使用客户端脚本时拾取JSON对象
- 如何通过json对象数组为嵌套对象赋值
- 构造JSON对象