javascript递归迭代json对象,得到每个遍历到的项目的路径,示例代码如下
注意json对象和数组的区分,具体参考这篇文章:
<script type="text/javascript"> var json = [{ "name": "zhansan", "age": 23, "address": { "city": "beijing", "year": [{ test: "气态流出物月报" }, [0, [1, 1]], 1], "gas": { "gasSheet": "气态流出物月报", "H_adjust": 1 }, "time": { "year": ["气态流出物月报", 0, 1], "start": [1, "~"], "duration": 31 } }, "units": { "title": "function" }, //怎么判断它是相对于根的子节点? "student": [13, "s1", "s2"] }, { abc: 123}]; function IsArray(o) { var _o = {}; return _o.toString.call(o) == '[object Array]' } function RecursionJson(json, path) { var isArray = IsArray(json); //防止JSON对象定义了length对象,所以判断数组不要通过对象的length属性判断 for (var attr in json) if (typeof json[attr] == 'object') { if (IsArray(json[attr])) { for (var j = 0; j < json[attr].length; j++) { if (typeof json[attr][j] == 'object') RecursionJson(json[attr][j], path + (isArray ? '[' : '.') + attr + (isArray ? ']' : '') + '[' + j + ']'); //不是普通类型,递归遍历 else alert(path + (isArray ? '[' : '.') + attr + (isArray ? ']' : '') + '[' + j + ']:' + json[attr][j]); } } else RecursionJson(json[attr], path + (isArray ? '[' : '.') + attr + (isArray ? ']' : '')); //递归遍历 } else alert(path + (isArray ? '[' : '.') + attr + (isArray ? ']' : '') + ':' + json[attr]); } RecursionJson(json, "json"); </script>
原创文章,转载请注明出处:
2014-1-7Web开发网