这个json我怎么也遍历不明白,求解?

ilovelnmp2 2013-09-05 03:38:18
求以下json的遍历方法,感谢!!!

var carData={"'34'":{"name":"A \u963f\u65af\u987f\u00b7\u9a6c\u4e01"
,"brand":{"'61'":{"name":"\u963f\u65af\u987f\u00b7\u9a6c\u4e01"
,"pserise":{"'298'":{"name":"Rapide","import":"2","model":{"'11563'":"Rapide 6.0L S","'5290'":"Rapide 6.0L"}},"'299'":{"name":"V12 Vantage","import":"2"
,"model":{"'11446'":"V12 Vantage 6.0L S","'8947'":"V12 Vantage 6.0 Roadster","'5291'":"V12 Vantage 6.0 Manual Coupe"}},"'629'":{"name":"V12 Zagato","import":"2"
,"model":{"'9037'":"V12 Zagato 6.0L"}},"'300'":{"name":"V8 Vantage","import":"2"
,"model":{"'5292'":"V8 Vantage 4.7 S Coupe","'5293'":"V8 Vantage 4.7 S Roadster","'5294'":"V8 Vantage 4.7 Sportshift Coupe","'5295'":"V8 Vantage 4.7 Sportshift Roadster"}},"'643'":{"name":"Vanquish","import":"2","model":{"'9057'":"Vanquish 6.0 \u57fa\u672c\u578b"}},"'301'":{"name":"Virage","import":"2"
,"model":{"'5301'":"Virage 6.0 Coupe","'5302'":"Virage 6.0 Volante"}},
"'302'":{"name":"\u963f\u65af\u987f\u9a6c\u4e01DB9","import":"2"
,"model":{"'10244'":"\u963f\u65af\u987f\u9a6c\u4e01DB9 6.0L Coupe"}}
,"'303'":{"name":"\u963f\u65af\u987f\u9a6c\u4e01DBS","import":"2"
,"model":{"'5311'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Touchtronic Coupe","'5312'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Manual Volante","'5313'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Touchtronic Volante","'5314'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Manual Coupe"}}}}}}}
...全文
1025 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hch126163 2013-09-06
  • 打赏
  • 举报
回复
递归。。。。
Andy猪猪侠 2013-09-05
  • 打赏
  • 举报
回复
另一个,你的json里,键怎么可以用数字啊,这样无法用对象调用的
Andy猪猪侠 2013-09-05
  • 打赏
  • 举报
回复


如上图片,遍历pserise对象,所以第一步需要先得到pserise对象,是个数组,再对该数组遍历
天际的海浪 2013-09-05
  • 打赏
  • 举报
回复
引用 7 楼 u011986361 的回复:
老大,你这种方法是不是直接能遍历N级的json? [quote=引用 5 楼 jslang 的回复:]

var carData={"'34'":{"name":"A \u963f\u65af\u987f\u00b7\u9a6c\u4e01"
,"brand":{"'61'":{"name":"\u963f\u65af\u987f\u00b7\u9a6c\u4e01"
,"pserise":{"'298'":{"name":"Rapide","import":"2","model":{"'11563'":"Rapide 6.0L S","'5290'":"Rapide 6.0L"}},"'299'":{"name":"V12 Vantage","import":"2"
,"model":{"'11446'":"V12 Vantage 6.0L S","'8947'":"V12 Vantage 6.0 Roadster","'5291'":"V12 Vantage 6.0 Manual Coupe"}},"'629'":{"name":"V12 Zagato","import":"2"
,"model":{"'9037'":"V12 Zagato 6.0L"}},"'300'":{"name":"V8 Vantage","import":"2"
,"model":{"'5292'":"V8 Vantage 4.7 S Coupe","'5293'":"V8 Vantage 4.7 S Roadster","'5294'":"V8 Vantage 4.7 Sportshift Coupe","'5295'":"V8 Vantage 4.7 Sportshift Roadster"}},"'643'":{"name":"Vanquish","import":"2","model":{"'9057'":"Vanquish 6.0 \u57fa\u672c\u578b"}},"'301'":{"name":"Virage","import":"2"
,"model":{"'5301'":"Virage 6.0 Coupe","'5302'":"Virage 6.0 Volante"}},
"'302'":{"name":"\u963f\u65af\u987f\u9a6c\u4e01DB9","import":"2"
,"model":{"'10244'":"\u963f\u65af\u987f\u9a6c\u4e01DB9 6.0L Coupe"}}
,"'303'":{"name":"\u963f\u65af\u987f\u9a6c\u4e01DBS","import":"2"
,"model":{"'5311'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Touchtronic Coupe","'5312'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Manual Volante","'5313'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Touchtronic Volante","'5314'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Manual Coupe"}}}}}}}
;
function df(io)
{
	var dd = "<ul>";
	for (var i in io)
		dd+="<li><b>"+i+":</b> "+(typeof(io[i])=="object"?df(io[i]):io[i])+"</li>";
	dd+="</ul>";
	return dd;
}
document.write(df(carData));;

[/quote] 是能遍历无限级
zhuolei123 2013-09-05
  • 打赏
  • 举报
回复
用递归遍历,代码如下,将你的JSON对象,转换层JSON字符串 alert(jsonToStr(carData))

function jsonToStr(json){
	if(json instanceof Array){ //如果是数组
		var tmpArr = [];
		for(var i=0;i<json.length;i++){
			tmpArr.push(jsonToStr(json[i])); //递归
		}
		return '['+tmpArr.join(",")+']'; //如果json是数组,那么最终会return这个
	}else if(json instanceof Object){ //如果是对象
		var tmpArr = [];
		for(var n in json){
			tmpArr.push('"'+n+'":'+jsonToStr(json[n])); //递归
		}
		return '{'+tmpArr.join(",")+'}'; //如果json是对象,那么最终会return这个
	}else if(typeof json == 'string'){ //如果是字符串
		return '"'+json.replace(/(\\|\")/g,"\\$1").replace(/\n/g,"\\n")+'"'; //如果json是字符串,就过滤掉斜杠、双引号、换行再返回
	}else{
		return json; //否则就原样返回
	}
}

zhuolei123 2013-09-05
  • 打赏
  • 举报
回复
用递归遍历,代码如下,将你的JSON对象,转换层JSON字符串 alert(jsonToStr(carData)) function jsonToStr(json){ if(json instanceof Array){ //如果是数组 var tmpArr = []; for(var i=0;i<json.length;i++){ tmpArr.push(jsonToStr(json[i])); //递归 } return '['+tmpArr.join(",")+']'; //如果json是数组,那么最终会return这个 }else if(json instanceof Object){ //如果是对象 var tmpArr = []; for(var n in json){ tmpArr.push('"'+n+'":'+jsonToStr(json[n])); //递归 } return '{'+tmpArr.join(",")+'}'; //如果json是对象,那么最终会return这个 }else if(typeof json == 'string'){ //如果是字符串 return '"'+json.replace(/(\\|\")/g,"\\$1").replace(/\n/g,"\\n")+'"'; //如果json是字符串,就过滤掉斜杠、双引号、换行再返回 }else{ return json; //否则就原样返回 } }
ilovelnmp2 2013-09-05
  • 打赏
  • 举报
回复
还有没有其它的方法,越好明白越好!
fzfei2 2013-09-05
  • 打赏
  • 举报
回复

var carData={"'34'":{"name":"A \u963f\u65af\u987f\u00b7\u9a6c\u4e01"
,"brand":{"'61'":{"name":"\u963f\u65af\u987f\u00b7\u9a6c\u4e01"
,"pserise":{"'298'":{"name":"Rapide","import":"2","model":{"'11563'":"Rapide 6.0L S","'5290'":"Rapide 6.0L"}},"'299'":{"name":"V12 Vantage","import":"2"
,"model":{"'11446'":"V12 Vantage 6.0L S","'8947'":"V12 Vantage 6.0 Roadster","'5291'":"V12 Vantage 6.0 Manual Coupe"}},"'629'":{"name":"V12 Zagato","import":"2"
,"model":{"'9037'":"V12 Zagato 6.0L"}},"'300'":{"name":"V8 Vantage","import":"2"
,"model":{"'5292'":"V8 Vantage 4.7 S Coupe","'5293'":"V8 Vantage 4.7 S Roadster","'5294'":"V8 Vantage 4.7 Sportshift Coupe","'5295'":"V8 Vantage 4.7 Sportshift Roadster"}},"'643'":{"name":"Vanquish","import":"2","model":{"'9057'":"Vanquish 6.0 \u57fa\u672c\u578b"}},"'301'":{"name":"Virage","import":"2"
,"model":{"'5301'":"Virage 6.0 Coupe","'5302'":"Virage 6.0 Volante"}},
"'302'":{"name":"\u963f\u65af\u987f\u9a6c\u4e01DB9","import":"2"
,"model":{"'10244'":"\u963f\u65af\u987f\u9a6c\u4e01DB9 6.0L Coupe"}}
,"'303'":{"name":"\u963f\u65af\u987f\u9a6c\u4e01DBS","import":"2"
,"model":{"'5311'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Touchtronic Coupe","'5312'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Manual Volante","'5313'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Touchtronic Volante","'5314'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Manual Coupe"}}}}}}}


var rs=[];
function getvs(o){
	for(var k in o) {
		typeof(o[k])=='object'?getvs(o[k] ):rs.push( k+':'+o[k]  )
  }
}
getvs(carData);
document.write( rs.join('<br/>') );
  • 打赏
  • 举报
回复
结构都知道,用[]或者.取数据就行了,由于你的有些键名称不是javascript的合法变量名称,所有要用[]来取
ilovelnmp2 2013-09-05
  • 打赏
  • 举报
回复
老大,你这种方法是不是直接能遍历N级的json?
引用 5 楼 jslang 的回复:

var carData={"'34'":{"name":"A \u963f\u65af\u987f\u00b7\u9a6c\u4e01"
,"brand":{"'61'":{"name":"\u963f\u65af\u987f\u00b7\u9a6c\u4e01"
,"pserise":{"'298'":{"name":"Rapide","import":"2","model":{"'11563'":"Rapide 6.0L S","'5290'":"Rapide 6.0L"}},"'299'":{"name":"V12 Vantage","import":"2"
,"model":{"'11446'":"V12 Vantage 6.0L S","'8947'":"V12 Vantage 6.0 Roadster","'5291'":"V12 Vantage 6.0 Manual Coupe"}},"'629'":{"name":"V12 Zagato","import":"2"
,"model":{"'9037'":"V12 Zagato 6.0L"}},"'300'":{"name":"V8 Vantage","import":"2"
,"model":{"'5292'":"V8 Vantage 4.7 S Coupe","'5293'":"V8 Vantage 4.7 S Roadster","'5294'":"V8 Vantage 4.7 Sportshift Coupe","'5295'":"V8 Vantage 4.7 Sportshift Roadster"}},"'643'":{"name":"Vanquish","import":"2","model":{"'9057'":"Vanquish 6.0 \u57fa\u672c\u578b"}},"'301'":{"name":"Virage","import":"2"
,"model":{"'5301'":"Virage 6.0 Coupe","'5302'":"Virage 6.0 Volante"}},
"'302'":{"name":"\u963f\u65af\u987f\u9a6c\u4e01DB9","import":"2"
,"model":{"'10244'":"\u963f\u65af\u987f\u9a6c\u4e01DB9 6.0L Coupe"}}
,"'303'":{"name":"\u963f\u65af\u987f\u9a6c\u4e01DBS","import":"2"
,"model":{"'5311'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Touchtronic Coupe","'5312'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Manual Volante","'5313'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Touchtronic Volante","'5314'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Manual Coupe"}}}}}}}
;
function df(io)
{
	var dd = "<ul>";
	for (var i in io)
		dd+="<li><b>"+i+":</b> "+(typeof(io[i])=="object"?df(io[i]):io[i])+"</li>";
	dd+="</ul>";
	return dd;
}
document.write(df(carData));;

天际的海浪 2013-09-05
  • 打赏
  • 举报
回复

var carData={"'34'":{"name":"A \u963f\u65af\u987f\u00b7\u9a6c\u4e01"
,"brand":{"'61'":{"name":"\u963f\u65af\u987f\u00b7\u9a6c\u4e01"
,"pserise":{"'298'":{"name":"Rapide","import":"2","model":{"'11563'":"Rapide 6.0L S","'5290'":"Rapide 6.0L"}},"'299'":{"name":"V12 Vantage","import":"2"
,"model":{"'11446'":"V12 Vantage 6.0L S","'8947'":"V12 Vantage 6.0 Roadster","'5291'":"V12 Vantage 6.0 Manual Coupe"}},"'629'":{"name":"V12 Zagato","import":"2"
,"model":{"'9037'":"V12 Zagato 6.0L"}},"'300'":{"name":"V8 Vantage","import":"2"
,"model":{"'5292'":"V8 Vantage 4.7 S Coupe","'5293'":"V8 Vantage 4.7 S Roadster","'5294'":"V8 Vantage 4.7 Sportshift Coupe","'5295'":"V8 Vantage 4.7 Sportshift Roadster"}},"'643'":{"name":"Vanquish","import":"2","model":{"'9057'":"Vanquish 6.0 \u57fa\u672c\u578b"}},"'301'":{"name":"Virage","import":"2"
,"model":{"'5301'":"Virage 6.0 Coupe","'5302'":"Virage 6.0 Volante"}},
"'302'":{"name":"\u963f\u65af\u987f\u9a6c\u4e01DB9","import":"2"
,"model":{"'10244'":"\u963f\u65af\u987f\u9a6c\u4e01DB9 6.0L Coupe"}}
,"'303'":{"name":"\u963f\u65af\u987f\u9a6c\u4e01DBS","import":"2"
,"model":{"'5311'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Touchtronic Coupe","'5312'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Manual Volante","'5313'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Touchtronic Volante","'5314'":"\u963f\u65af\u987f\u9a6c\u4e01DBS 6.0 Manual Coupe"}}}}}}}
;
function df(io)
{
	var dd = "<ul>";
	for (var i in io)
		dd+="<li><b>"+i+":</b> "+(typeof(io[i])=="object"?df(io[i]):io[i])+"</li>";
	dd+="</ul>";
	return dd;
}
document.write(df(carData));;

ilovelnmp2 2013-09-05
  • 打赏
  • 举报
回复
哥请写出全遍历的代码,我就是因为不会遍历这种结构,谢谢!
引用 2 楼 lirenniao 的回复:

var carData = {
            "'34'": {
                "name": "A 阿斯顿·马丁",
                "brand": {
                    "'61'": {
                        "name": "阿斯顿·马丁",
                        "pserise": {
                            "'298'": {
                                "name": "Rapide",
                                "import": "2",
                                "model": {
                                    "'11563'": "Rapide 6.0L S",
                                    "'5290'": "Rapide 6.0L"
                                }
                            },
                            "'299'": {
                                "name": "V12 Vantage",
                                "import": "2",
                                "model": {
                                    "'11446'": "V12 Vantage 6.0L S",
                                    "'8947'": "V12 Vantage 6.0 Roadster",
                                    "'5291'": "V12 Vantage 6.0 Manual Coupe"
                                }
                            },
                            "'629'": {
                                "name": "V12 Zagato",
                                "import": "2",
                                "model": {
                                    "'9037'": "V12 Zagato 6.0L"
                                }
                            },
                            "'300'": {
                                "name": "V8 Vantage",
                                "import": "2",
                                "model": {
                                    "'5292'": "V8 Vantage 4.7 S Coupe",
                                    "'5293'": "V8 Vantage 4.7 S Roadster",
                                    "'5294'": "V8 Vantage 4.7 Sportshift Coupe",
                                    "'5295'": "V8 Vantage 4.7 Sportshift Roadster"
                                }
                            },
                            "'643'": {
                                "name": "Vanquish",
                                "import": "2",
                                "model": {
                                    "'9057'": "Vanquish 6.0 基本型"
                                }
                            },
                            "'301'": {
                                "name": "Virage",
                                "import": "2",
                                "model": {
                                    "'5301'": "Virage 6.0 Coupe",
                                    "'5302'": "Virage 6.0 Volante"
                                }
                            },
                            "'302'": {
                                "name": "阿斯顿马丁DB9",
                                "import": "2",
                                "model": {
                                    "'10244'": "阿斯顿马丁DB9 6.0L Coupe"
                                }
                            },
                            "'303'": {
                                "name": "阿斯顿马丁DBS",
                                "import": "2",
                                "model": {
                                    "'5311'": "阿斯顿马丁DBS 6.0 Touchtronic Coupe",
                                    "'5312'": "阿斯顿马丁DBS 6.0 Manual Volante",
                                    "'5313'": "阿斯顿马丁DBS 6.0 Touchtronic Volante",
                                    "'5314'": "阿斯顿马丁DBS 6.0 Manual Coupe"
                                }
                            }
                        }
                    }
                }
            }
        };

按照结构,一直遍历吧。
ilovelnmp2 2013-09-05
  • 打赏
  • 举报
回复
引用 1 楼 wzs_xyz 的回复:
用for in 来遍历 for(var name in carData) { alert(name+":"+carData[name]); }
请遍历到最深层次,我是菜鸟
lirenniao 2013-09-05
  • 打赏
  • 举报
回复

var carData = {
            "'34'": {
                "name": "A 阿斯顿·马丁",
                "brand": {
                    "'61'": {
                        "name": "阿斯顿·马丁",
                        "pserise": {
                            "'298'": {
                                "name": "Rapide",
                                "import": "2",
                                "model": {
                                    "'11563'": "Rapide 6.0L S",
                                    "'5290'": "Rapide 6.0L"
                                }
                            },
                            "'299'": {
                                "name": "V12 Vantage",
                                "import": "2",
                                "model": {
                                    "'11446'": "V12 Vantage 6.0L S",
                                    "'8947'": "V12 Vantage 6.0 Roadster",
                                    "'5291'": "V12 Vantage 6.0 Manual Coupe"
                                }
                            },
                            "'629'": {
                                "name": "V12 Zagato",
                                "import": "2",
                                "model": {
                                    "'9037'": "V12 Zagato 6.0L"
                                }
                            },
                            "'300'": {
                                "name": "V8 Vantage",
                                "import": "2",
                                "model": {
                                    "'5292'": "V8 Vantage 4.7 S Coupe",
                                    "'5293'": "V8 Vantage 4.7 S Roadster",
                                    "'5294'": "V8 Vantage 4.7 Sportshift Coupe",
                                    "'5295'": "V8 Vantage 4.7 Sportshift Roadster"
                                }
                            },
                            "'643'": {
                                "name": "Vanquish",
                                "import": "2",
                                "model": {
                                    "'9057'": "Vanquish 6.0 基本型"
                                }
                            },
                            "'301'": {
                                "name": "Virage",
                                "import": "2",
                                "model": {
                                    "'5301'": "Virage 6.0 Coupe",
                                    "'5302'": "Virage 6.0 Volante"
                                }
                            },
                            "'302'": {
                                "name": "阿斯顿马丁DB9",
                                "import": "2",
                                "model": {
                                    "'10244'": "阿斯顿马丁DB9 6.0L Coupe"
                                }
                            },
                            "'303'": {
                                "name": "阿斯顿马丁DBS",
                                "import": "2",
                                "model": {
                                    "'5311'": "阿斯顿马丁DBS 6.0 Touchtronic Coupe",
                                    "'5312'": "阿斯顿马丁DBS 6.0 Manual Volante",
                                    "'5313'": "阿斯顿马丁DBS 6.0 Touchtronic Volante",
                                    "'5314'": "阿斯顿马丁DBS 6.0 Manual Coupe"
                                }
                            }
                        }
                    }
                }
            }
        };

按照结构,一直遍历吧。
未知数 2013-09-05
  • 打赏
  • 举报
回复
用for in 来遍历 for(var name in carData) { alert(name+":"+carData[name]); }

87,991

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧