在Web应用程序的上下文中,我有一个服务器,它根据客户端的输入发送或接收
JSON字符串.在客户端使用时,这些JSON字符串会立即转换为
JavaScript对象,在这些对象中,它们将作为对象活出来.这些对象不是数组;它们代表复杂的,任意的数据模型,其每个属性可以具有任意数量的唯一子属性或对象.
var myView = {
name: 'root'
id: 'root_0'
children: {
child_1: {
arbitraryid: 'root_0_child_1',
type: 'Department',
name: 'Produce',
quadrant: 1,
children: {
child_1: {
arbitraryid: 'root_0_child_1_child_1',
type: 'Aisle',
number: 3,
length: 12,
children: { }
}
}
},
child_2: {
arbitraryid: 'root_0_child_2',
name: 'West',
type: 'Region',
children: {
child_1: {
arbitraryid: 'root_0_child_2_child_1',
name: 'Wegmans',
type: 'Store',
children: {
child_1: {
arbitraryid: 'root_0_child_2_child_1_child_1',
type: 'Department',
children: { }
}
}
}
}
}
}
};
当我构建JSON字符串服务器端时,我保证所有对象都具有’children’和’arbitraryid’属性;但其他一切都是动态生成的,属性和值完全是任意的.
如果这是XML,我可以使用jQuery来改变someChild = myView.find(‘#root_0_child_1_child_1’).这将得到一个jQuery对象,其中包含find的结果,不仅是对myView的引用,而且是一个全方位地通过对象移动的位置:var someChild = myView.find(‘#root_0_child_1_child_1’).parent().
是否存在用于解决本机JavaScript对象的此问题的实用程序,或者是否有更好的方法/方法来执行此操作?我想避免编写一堆这种类型的代码来简单地获取我的属性,然后再次循环以更新父对象.
while (obj.hasOwnProperty('children')) {
for (var child in obj) {
//..etc, etc
}
}
我在这个问题上看到的大多数SO问题都涉及with searching arrays,frequently with predictable data table style construction.
映射是可能的,但是这些对象很快变得很深,而且这个选项似乎比哑循环更好.
想法?
编辑:滚动我自己的实用工具类.
我还在探索其他库/实用程序,但是我编写了一个通用的助手类来进行搜索:
虽然有用,但我认为它说明了获得其他类似jQuery功能的一些困难.我不仅想要搜索,而且我希望能够像对象链接.parent().children().find()操作符一样向上/向下爬行对象属性结构.可行但复杂.
最佳答案 我找到了一些JSON查询语言:
> JSONPath
> JAQL
> LINQ to Javascript
> JSINQ
> jLinq
> SQLike(尽管名称,它用于查询JSON)
> TrimQuery(使用类似SQL的语言来查询JSON对象)
This page将它们总结起来,并通过它们的优点和缺点.
还有一个用于查询JSON的DOJO模块:
我不确定这些是多么稳定/标准.