遍历 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对象数据进行测试 ...
随机推荐
- 2.2.11同步synchronized方法无限等待与解决
同步方法容易造成死循环. package com.cky.bean; /** * Created by edison on 2017/12/8. */ public class Service { s ...
- javascript 模块化编程
The module pattern is a common JavaScript coding pattern. It’s generally well understood, but there ...
- set_error_handler
set_error_handler这个函数的作用是为了防止错误路径泄露 何为错误路径泄露呢? 我们写程序,难免会有问题,而PHP遇到错误时,就会给出出错脚本的位置.行数和原因 有很多人说,这并没有什么 ...
- pickle 继承
1.什么是方法,什么是函数 class Foo: def chi(self): print("我是吃") @staticmethod def static_method(): pa ...
- hdu4742
题意:给定3维的n(<=100000)个点,求最长不下降子序列长度(对于1和2两个点,2可以放在1后面,x1<=x2,y1<=y2,z1<=z2 ),并求出有多少种方案. 思路 ...
- Poj2296
题意:给定n个点,然后在每个点在一个正方形的上边或者下边的中点,并且所有的正方形等大且不能重叠.求正方形最大的边长是多少. 思路:很明显的二分边长+判定.不过判定要用到2-sat,算是2-sat的入门 ...
- cxgrid动态生成footersummary 并获得值
cxgrid动态生成footersummary 并获得值 var f: TcxGridDBTableSummaryItem; cx_for_mctv.OptionsView.Footer := t ...
- JS学习笔记1_基础与常识
1.六种数据类型 5种基础的:Undefined,Null,Boolean,Number,String(其中Undefined派生自Null) 1种复杂的:Object(本质是一组无序键值对) 2.字 ...
- 【抄袭】VB.NET扩展WebBrowser,拥有跳转前获取URL的能力
来自 http://www.cnblogs.com/yuanjw/archive/2009/02/09/1386789.html 我仅做VB化,并优化了事件消息 Imports System.Comp ...
- C# 在WPF中使用Exceptionless异常日志框架
登录http://exceptionless.com/官网,注册一个账户. 创建项目 选择wpf项目类型 拷贝下箭头指的这个密钥,过后程序里用的到. 下面我们打开vs,新建一个wpf的项目 打开git ...