你有没有对“在复杂的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. BST POJ - 2309 思维题

    Consider an infinite full binary search tree (see the figure below), the numbers in the nodes are 1, ...

  2. Azure Pipelines

    https://docs.microsoft.com/en-us/azure/devops/pipelines/?view=vsts

  3. javascript实现购物车思路

    /* 思路: 第一步:获取所要操作的节点对象 第二步:当页面加载完后,需要计算本地cookie存了多少[个]商品,把个数赋值给count 第三步:为每一个商品对应的添加购物车按钮绑定一个点击事件onc ...

  4. Jade模板引擎学习(二)语法:代码、变量、循环、过滤器及mixin

    Jade语法 一.代码 不会被缓冲代码 ul - for(var i=0; i; i++) li Jade Engine 会转换为: <ul> <li>Jade Engine& ...

  5. SpringMVC中ModelAndView addObject()设置的值jsp取不到的问题

    controller public class HelloWorldController implements Controller { public ModelAndView handleReque ...

  6. vijos 1153 背包+标记

    描述 新一年度的猫狗大战通过SC(星际争霸)这款经典的游戏来较量,野猫和飞狗这对冤家为此已经准备好久了,为了使战争更有难度和戏剧性,双方约定只能选择Terran(人族)并且只能造机枪兵. 比赛开始了, ...

  7. PAT (Advanced Level) 1007. Maximum Subsequence Sum (25) 经典题

    Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { Ni, ...

  8. flask 自定义url转换器

    from werkzeug.routing import BaseConverter app = Flask(__name__) class TeleConveter(BaseConverter): ...

  9. spring 那点事

    Spring核心功能 DI(IOC) 何谓DI(IOC) DI(依赖注入)是spring的核心功能之一. Dependency Injection 和 Inversion of Control 其实就 ...

  10. 【洛谷 P2742】【模板】二维凸包

    题目链接 二维凸包板子..有时间会补总结的. #include <cstdio> #include <cmath> #include <algorithm> usi ...