如何以jQuery方式搜索和操作复杂的JavaScript对象

时间:2011-08-17 14:31:07

标签: javascript jquery json search javascript-objects

在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 var someChild = myView.find('#root_0_child_1_child_1')。这将得到一个jQuery对象,其结果是查找AND 不仅是对myView的引用,而是一个位置,可从该对象全方向移动通过该对象:{{1} }。

是否存在一个实用程序来解决本机JavaScript对象的这个问题,或者是否有更好的方法/方法来执行此操作?我想避免编写一堆这种类型的代码来简单地获取我的属性,然后再次循环以更新父对象。

var someChild = myView.find('#root_0_child_1_child_1').parent()

我在此主题中看到的大多数SO问题都涉及with searching arraysfrequently with predictable data table style construction

映射是可能的,但是这些对象很快变得很深,而且这个选项似乎比哑循环更好。

想法?

编辑:滚动我自己的实用工具类。

我还在探索其他库/实用程序,但是我写了一个通用的帮助类来进行搜索:

ObjectHelper

虽然有用,但我认为它说明了获得其他类似jQuery功能的一些困难。我不仅想要搜索,而且我希望能够像对象链接.parent()。children()。find()操作符一样向上/向下爬行对象属性结构。可行,但很复杂。

2 个答案:

答案 0 :(得分:2)

我找到了一些JSON查询语言:

This page对它们进行总结,并了解它们的优点和缺点。

还有一个用于查询JSON的DOJO模块:

我不确定这些是多么稳定/标准。

答案 1 :(得分:0)

我通过rolling my own classes解决了这个问题。 ShadesJS现在非常基础,但它有一些方法可以抓取JavaScript对象并使用Web存储。在待办事项上实现父/子方法以获得一些JQuery特有的灵活性。这并不难,但要使其正确和高效,这很棘手。