你有没有对“在复杂的JSON数据结构中查找匹配内容”而烦恼。这里有8种不同的方式可以做到:

JsonSQL

JsonSQL实现了使用SQL select语句在json数据结构中查询的功能。

例子:

1
jsonsql.query("select * from json.channel.items order by title desc",json);

主页:http://www.trentrichardson.com/jsonsql/

JSONPath

JSONPath就像是针对JSON数据结构的XPath。

例子:

1
jsonPath( books,
'$..book[(@.length-1)]')

主页:http://goessner.net/articles/JsonPath/

jfunk

jFunk允许你检索(很快会加入管理功能)复杂的JSON或JavaScript对象。jFunk API的设计几乎与jQuery API类似。它直接复制了jQuery的API,除了那些针对DOM的API。

例子:

1
Jf("> vegetables > *[color=Orange]",Food).get();

主页:http://code.google.com/p/jfunk/

TaffyDB

你过去有没有注意到Javascript对象的字面值看起来很像记录?如果你把他们包裹在一个数组里面,那么它们看起来有没有像一个数据库表?TaffyDB是一个Javascript库,它提供了强大的数据库功能以实现之前的想法,大大改善了你在Javascript中使用数据的方式。

1
var
kelly = friends({id:2}).first();

主页:http://www.taffydb.com/

linq.js

linq.js——Javascript中的LINQ(译者注:.Net中的概念,见http://msdn.microsoft.com/zh-tw/library/bb397897

1
2
3
4
5
var
queryResult2 = Enumerable.From(jsonArray)
    .Where("$.user.id < 200")
    .OrderBy("$.user.screen_name")
    .Select("$.user.screen_name + ':' + $.text")
    .ToArray();

主页:http://linqjs.codeplex.com/

主页:http://neue.cc/reference.htm

objeq

objeq是一个简单的库,实现了对POJSO(Plain-Old JavaScript Objects,普通的Javascript对象)的实时查询。

1
2
var
res = $objeq(data, "age > 40 && gender == 'female' -> name");
    // --> Returns ['Jessica']

主页:https://github.com/agilosoftware/objeq

(译注:它使用了Javascript的property setters,所以它只能工作在较新的浏览器上)

json:select()

使用类CSS选择符来查询JSON。

1
.lang:val("Bulgarian") ~ .level

主页:http://jsonselect.org/#tryit

Paul的编程珠玑中的Javascript数组过滤方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var
a = [1,2,3,4,5,6,7,8,9,10];
  
        // return everything
  
        a.where(
"( ) => true"
) ;
  
        //  --> [1,2,3,4,5,6,7,8,9,10]
  
        // return even numbers
  
        a.where(
"( n, i ) => n % 2 == 0"
) ;
  
        //  --> [2,4,6,8,10]
  
        // query first 6 products whose category begins with 'con' using extra param and regular expression
  
        products.where(
"( el, i, res, param ) => res.length <= 6 && param.test( el.cat )", /^con/i);
  
        // using customer table data from SQL Server's northwind database...    
  
        customers.where(
"( el, i, res, param ) => el.country == param",
"USA"
);

主页:http://www.paulfree.com/28/javascript-array-filtering/#more-28

目前这是我最喜欢的查询JSON数据结构的方法。它非常的简单,并且据作者所说它非常快。

它背后的理念和John Resig的JavaScript Micro-Templating类似:使用正确表达式将一段非常简单的字符串转换成Javascript函数。

当然,还有更多强大的解决方案。Paul实现的原型还缺少对过滤表达式的语法检查,但是我相信你应该可以自己解决Javscript的语法检查。

最后,你必须决定哪个对于你的项目来说最好

8种json数据查询方式的更多相关文章

  1. c#处理3种json数据的方式

    原文出处:http://www.jb51.net/article/48027.htm 一.C#处理简单json数据 json数据: {"result":"0", ...

  2. Request三种获取数据的方式

    今天在做ajax请求后台代码时,发现ajax的方法都对,但就是请求不了后台代码,后来在同事帮助下才发现前台定义了两个相同参数导致请求出错. 下面记录一下request三种获取数据的方式: 1. Req ...

  3. MYSQL 4种插入数据的方式比较

    4种插入数据的方式 第一种:insert into insert into是最常用的插入数据的方式,可以单条插入,也可以多条,还可以指定从其他表中select然后插入. 详细可以参考:insert语法 ...

  4. Druid 0.17入门(4)—— 数据查询方式大全

    本文介绍Druid查询数据的方式,首先我们保证数据已经成功载入. Druid查询基于HTTP,Druid提供了查询视图,并对结果进行了格式化. Druid提供了三种查询方式,SQL,原生JSON,CU ...

  5. 常用的几种 SQLServer 分页查询方式实现

    SQLServer 的数据分页: 假设现在有这样的一张表:CREATE TABLE test( id int primary key not null identity, names varchar( ...

  6. 一起学Hive——详解四种导入数据的方式

    在使用Hive的过程中,导入数据是必不可少的步骤,不同的数据导入方式效率也不一样,本文总结Hive四种不同的数据导入方式: 从本地文件系统导入数据 从HDFS中导入数据 从其他的Hive表中导入数据 ...

  7. 3中转换JSON数据的方式

    一:前言 来公司一个星期,把最近做的东西梳理下,并把觉得有必要的知识点记载下,现在传数据很多都是用JSON来传数据,所以我就找了集中传json的方式,其实是有五种的,但是有一个我没有用过,太陌生了,上 ...

  8. Python格式化处理json数据的方式

    1.问题 在遇到json数据的过程中,我们经常需要获取json数据中某个值的操作,如果是用get方法去取比较繁琐,接下来介绍两种方式来取值. 2.jsonpath来格式化处理json数据 2.1介绍 ...

  9. 比jsonpath 更方便的json 数据查询JMESPath 使用

      类似xml 的xpath json 有jsonpath 都是为了方便进行数据查询,但是jsonpath 的功能 并不是很强大,如果为了方便查询可以使用jmespath. 以下为简单使用: 查询格式 ...

随机推荐

  1. Stars POJ - 2352

    Astronomers often examine star maps where stars are represented by points on a plane and each star h ...

  2. [Jenkins 新插件] 兼容阿里开发手册 (P3C) 的火线插件安装使用教程

    一.前言 火线(Fireline)的Jenkins官方插件已经上线,目前火线不仅能检查出安卓代码中的安全类问题和内存泄露问题,还兼容了阿里开源的Java开发规约(P3C项目),本文将以教程的形式帮助大 ...

  3. gulp压缩css和js

    压缩 css 代码可降低 css 文件大小,提高页面打开速度. 规律转换为 gulp 代码 找到 css/ 目录下的所有 css 文件,压缩它们,将压缩后的文件存放在 dist/css/ 目录下.一. ...

  4. lombok 配置使用以及优势

    maven依赖 <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> ...

  5. jenkins修改job默认名字

    ${GIT_BRANCH,fullName="false"}-${BUILD_NUMBER}-${GIT_REVISION,length=12}-${deploy_rollback ...

  6. 【BZOJ4373】算术天才⑨与等差数列 [线段树]

    算术天才⑨与等差数列 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 算术天才⑨非常喜欢和等 ...

  7. 【HNOI】五彩斑斓 模拟

    [题目描述] 给定一个n*m的矩阵,矩阵的某些位置有一个颜色(可以没有颜色,即为0),现在你可以将矩阵的某一行或者某一列染成同一种颜色,问最少用多少步能达到目标矩阵的染色方案,输出最少步数和方案. [ ...

  8. js_一个简单的30分钟循环倒计时

    吐槽段: 需求的变更是千变万化的,至少在你说服和你打交道的那位谁谁谁之前. 创业公司就是这样,产品经理一个想法,就是改改改,管你改起来复杂不复杂,在他们眼里都是非常简单的. 今天的一个小改动需求,把活 ...

  9. RecycleView Bug:java.lang.IndexOutOfBoundsException: Inconsistency detected.

    今天使用RecyclerView时,上下两个RecyclerView,在实现下拉刷新时,报错: java.lang.IndexOutOfBoundsException: Inconsistency d ...

  10. 集合框架源码学习之LinkedList

    0-1. 简介 0-2. 内部结构分析 0-3. LinkedList源码分析 0-3-1. 构造方法 0-3-2. 添加add方法 0-3-3. 根据位置取数据的方法 0-3-4. 根据对象得到索引 ...