2012-03-16 131 views
7

我目前正在处理一个项目,我正在处理相当数量的JSON数据通过浏览器作为JavaScript对象列表进行反向传输和存储。例如:Javascript JSON数据操作库

person: { 
    // Primary Key 
    key: "id", 
    // The actual records 
    table: { 
     "1": {id: 1, name: "John", surname: "Smith", age: 26}, 
     "2": {id: 2, name: "Mary", surname: "Brown", age: 19}, 
     // etc.. 
    }, 
    indexes: { 
     // Arrays of pointers to records defined above 
     "name": [ 
      {id: 89, name: "Aaron", surname: "Jones", age: 42}, 
      // etc.. 
     ] 
    } 

我发现自己编码的各种索引和排序算法能够有效地处理这些数据,我开始想,这种事情必须已经做过的事情。

我必须使用Ext.data.StoreExt.data.Record对象进行这种数据处理的经验,但我认为他们是初级开发人员,我工作的项目过于复杂的是一个小型的移动应用中,我们不能为了它而添加了一个300K +库,所以我需要的东西非常少。

任何想法,如果有一个具有以下一个JavaScript JSON操作框架:

  1. 检索
  2. 排序
  3. 迭代通过 JSON数据,
  4. 干净的API
  5. 最小的性能拖累(手机没有很多的计算能力)
  6. 小型有效载荷是理想< 10K?

我可能会问太多,但希望有人在使用这样的事情...那种东西,我寻找的是的JSON相当于jQuery的的,也许它不是那么古怪。

回答

10

就以jsonQ

看看它fullfill所有需求指出的问题。

  • 可存储,
  • 检索
  • 并通过JSON数据迭代,

提供遍历(如发现,兄弟姐妹,父母等),操作方法一样(值,追加,前插) ;

  • 排序

提供jsonQ对象上运行的直接阵列排序方法和排序方法。 (这两种排序方法递归运行)

  • 用干净的API

它是一种试验,为JSON相同的API的jQuery的DOM API。所以如果你熟悉jQuery。它很容易追上。更多完整的documentation apis可用。

  • 最小性能拖动

它创建用于在内部用于遍历它们是更有效的数据的JSON数据上jsonQ的初始化的新格式。 (就像一次有所有的循环,所以你不必循环遍历循环来重复每次该JSON)。

  • 和一个理想的小有效载荷< 10K?

缩小版本是11.7 kb。

+0

太棒了!我希望我可以upvote 5次! – 2013-11-18 11:36:49

0

其实你的问题不好,我想。从你的例子中可以看出,你正试图用JSON来模拟类似SQL的存储。也许,你只需要拿IndexedDB

jsonpath匹配您的确切要求4-7(也可能是3)和全局对象允许1和2只需要一次调用。

恕我直言的要求是不真实的,特别是关于尺寸的最后一个。

+0

嗨Kirilloid,谢谢你的回应。 IndexedDB有一个非常复杂的API,它需要磁盘IO,这是性能问题。该应用程序是一个单页的Web应用程序,所以内存JSON提供了迄今为止最好的性能。我同意尺寸要求是相当有限的,但我不认为它是不可能的,因为我只是在用于保持跟踪的方法.get(),.set(),.index(),.each()和.data属性之后的JSON ..我会看看jsonpath并让你知道。 – 2012-03-16 11:48:59

+0

jsonpath很有趣,我喜欢尝试模拟XPath的想法,但是我不确定它是什么,因为XPath是用于非结构化文档的,而我更像是在像内存这样的类似于内存SQL的存储之后上述(其中有一个数据模型和不同的实体)。 – 2012-03-16 12:12:33

+1

Xpath也适用于结构化文档,但对于**树** - 结构化;-) – kirilloid 2012-03-16 12:22:22

0

我认为Lawnchair是你正在寻找的东西。它的主页表示它是用移动设备制作的,但是我之前没有使用它,所以我不能对此发表评论。

这是一个简单的键值存储,尽管您可以定义自己的索引,就像使用CouchDB一样。我还没有看到选择器的支持,但有一个查询插件可用,承诺容易选择。

类似jQuery的东西依赖于sizzle,这是CSS选择器库,不适用于你的情况。 XPath在我看来是你最好的选择,因为它主要用于XML,树形结构。由于JSON对象可以表示为一棵树,我发现JSONSelect是一个小型库,它支持'CSS-ish'方式的JSON Xpath选择器。

如果你能以某种方式插入到JSONSelect Lawnchair,我想你已经找到了一个伟大的组合:)

+0

Lawnchair看起来很有趣.. – 2012-03-16 15:33:48