遍历 JSON JavaScript 对象树中的所有节点
我想要遍历 JSON 对象树中,但为何找不到任何一间图书馆。这似乎是不难,但感觉就像重新发明轮子。
在 XML 中有很多教程演示如何遍历 XML DOM 树:(
解决方法 1:
如果你认为 jQuery 是什么样的
overkill
这种原始的任务,你可以这样做:
//your object
var o = {
foo:"bar",
arr:[1,2,3],
subo: {
foo2:"bar2"
}
}; //called with every property and it's value
function process(key,value) {
log(key + " : "+value);
} function traverse(o,func) {
for (i in o) {
func.apply(this,[i,o[i]]);
if (typeof(o[i])=="object") {
//going on step down in the object tree!!
traverse(o[i],func);
}
} //that's all... no magic, no bloated framework
traverse(o,process);
解决方法 2:
JSON 对象是简单 Javascript 对象。这实际上是 JSON 的主张: JavaScript 对象表示法。所以你会遍历 JSON 对象,但是你会选择"穿越"Javascript 对象一般。
Jquery,我会像做
$.each(myJsonObj, function(key,val){
// do something with key and val
});
您始终可以编写一个函数以递归方式下降到的对象:
function traverse(jsonObj) {
if( typeof jsonObj == "object" ) {
$.each(jsonObj, function(k,v) {
// k is either an array index or object key
traverse(v);
}
}
else {
// jsonOb is a number or string
}
}
这应该是一个好的起点。我强烈建议使用 jQuery 这样的事情,因为他们的实用程序,如在每个循环使编写这样的代码要容易得多。
解决方法 3:
那里是遍历 JSON 数据支持许多不同的使用情况下的 javascript 的新图书馆。
http://github.com/substack/js-traverse
它适用于所有种类的 JavaScript 对象。它甚至会检测周期。
它也提供了每个节点的路径。
解决方法 4:
取决于你想做什么。下面是一个示例的遍历 JavaScript 对象树、 打印键和值的它:
function js_traverse(o) {
var type = typeof o
if (type == "object") {
for (var key in o) {
print("key: ", key)
js_traverse(o[key])
}
} else {
print(o)
}
}
js> foobar = {foo: "bar", baz: "quux", zot: [1, 2, 3, {some: "hash"}]}
[object Object]
js> js_traverse(foobar)
key: foo
bar
key: baz
quux
key: zot
key: 0
1
key: 1
2
key: 2
3
key: 3
key: some
hash
解决方法 5:
有缺少} 在上面的导线函数。更正后的版本:
函数 traverse(o,func) {为 (i 在澳) {func.apply(this,[i,o[i]]) ;
如果 (typeof(o[i])=="object") {//going 在对象树中向下一步 !!traverse(o[i],func) ;} } }
遍历 JSON JavaScript 对象树中的所有节点的更多相关文章
- 8.7 JSON存储数据方式(JavaScript对象表示法)
8.7 JSON存储数据方式(JavaScript对象表示法) JSON JavaScript 对象表示法(JavaScript Object Notation) 是一种存储数据的方式. 一.创建JS ...
- JSON和JavaScript对象
var obj={width:100,height:200},这样的并不叫JSON,并且JSON只是一种数据格式,并不是具体的实例. 但很多人把这样的JS对象当成JSON,下面把这个问题讲清楚 一.J ...
- javascript遍历json对象数据的方法
JSON中,有两种结构:对象和数组,对象是没有length这个属性,而数组结构是有的,下面分别说下这两种结构之间的区别和遍历方式. 1.对象 一个对象以“{”开始,“}”结束.每个“key”后跟一“: ...
- 前端笔记之jQuery(下)事件&节点操作&净位置&拖拽&页面卷动值&遍历JSON
一.监听事件大全 1.1 JavaScript事件 onblur 元素失去焦点 onchange 用户改变域的内容 onclick 鼠标点击某个对象 ondblclick 鼠标双击某个对象 onfoc ...
- 对于json对像,怎么遍历json对象的所有key,在使用json对象时,如果无法知道key,怎么通过key变量来获取值
对于json对像,怎么遍历json对象的所有key,在使用json对象时,如果无法知道key,怎么通过key变量来获取值?请参阅下面的关键代码: <html> <head> & ...
- $.each遍历json对象
查看一个简单的jQuery的例子来遍历一个JavaScript数组对象. var json = [ {"id":"1","tagName": ...
- $.each()遍历Json对象
1.遍历JavaScript数组对象: var json = [ //中括号起始 {"id":"1","tagName":"app ...
- JavaScript对象遍历
一.对象是数组: var arr = [9, 8, 7, 6, 5, 4, 3, 2, 1]; //each遍历: $.each(arr,function (index,value) { alert( ...
- 使用for in循环遍历json对象的数据
使用for in遍历json对象数据,如果数据中的名称有为数字的话,只对正整数有效,那么先会输出为正整数的数据,后面其他的会按照原来数据中定义的顺序不变输出. 针对名称为数字的json对象数据进行测试 ...
随机推荐
- codeforces815A Karen and Game 2017-06-27 15:22 31人阅读 评论(0) 收藏
C. Karen and Game time limit per test 2 seconds memory limit per test 512 megabytes input standard i ...
- hdu 4969 平面几何积分
http://acm.hdu.edu.cn/showproblem.php?pid=4969 Guizeyanhua要去追一个女孩,女孩在以Guizeyanhua为圆心,半径为R的圆上匀速运动,女孩的 ...
- 初始Hbase
Hbase 定义 HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现 的编程语言为 Java. 是Apache软件基金会的Hadoop项目的一部分,运行 ...
- springMVC一个Controller处理所有用户请求的并发问题
有状态和无状态的对象基本概念: 有状态对象(Stateful Bean),就是有实例变量的对象 ,可以保存数据,是非线程安全的.一般是prototype scope. 无状态对象(Stateless ...
- MySQL表名大小写设置
1 简介 在MySQL中,数据库对应数据目录中的目录.数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎).因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小 ...
- 纯净得只剩下字的访问IP查询API
纯净得只剩下字的访问IP查询API 实用资源 / 2018-02-26 / 3 条评论 看到一个好玩的,就随手收藏一下,本API作用:获取用户真实IP,而获取用户IP常见的坑有两个,开发支付的时候也需 ...
- 微信内置浏览器私有接口WeixinJSBridge介绍
原文地址:http://www.3lian.com/edu/2015/05-25/216227.html 这篇文章主要介绍了微信内置浏览器私有接口WeixinJSBridge介绍,本文讲解了发送给好友 ...
- winform执行程序报错:已停止工作,windows正在检查该问题的解决方案
每次运行程序时都会弹出错误框:winform已停止工作,windows正在检查该问题的解决方案 事件查看器错位信息: 错误应用程序名称: TMS_winform.exe,版本: 1.0.0.0,时间戳 ...
- ovs stp
环路拓扑 组成拓扑结构的脚本 构成连通脚本 ip netns add ns1 ovs-vsctl add-br br1 ovs-vsctl add-port br1 tap1 -- set Inter ...
- c++中的一些计算的问题
要实现小数的四舍五入, float a = 3.456; //保留到小数点后两位 float b =(int)((a * 100) + 0.5) / 100.0; 但是这样对负数不好使, 对负数的话, ...