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

标签 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 对象,其中包含查找的结果,不仅是对 myView 的引用,而且是一个位置,从该位置可以全向移动通过对象:var someChild = myView.find('#root_0_child_1_child_1').parent().

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

while (obj.hasOwnProperty('children')) {
   for (var child in obj) {
     //..etc, etc
   } 
}

我在这个主题上看到的大多数 SO 问题都是 with searching arrays , frequently with predictable data table style construction .

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

想法?

编辑:滚动我自己的实用程序类。

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

ObjectHelper

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

最佳答案

我发现了一些 JSON 查询语言:

This page总结它们并分析它们的优缺点。

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

不过我不确定它们有多稳定/标准。

关于javascript - 如何以 jQuery 方式搜索和操作复杂的 JavaScript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7094563/

相关文章:

javascript - 无法通过 jquery 在动态生成的 div 上设置顶部/左侧属性

ios - 将 "Get"请求数据分配给文本字段

javascript - Angularjs ng-model 未绑定(bind)到隐藏输入

javascript - Chartjs v2 描边阴影

javascript - 为什么此 D3.js 条形图上的数据未正确更新?

javascript - jquery prop() 立即(重点?)

javascript - 加载动态内容后调用函数

Javascript 引号 ... 淡入淡出

json - 如何在 Dart 中处理 JSON

ruby-on-rails - JSON、response_with 和嵌套资源路由错误?