JsonPath小结
2016-01-07 19:40
519 查看
在查看DHC Assertions 模块说明的时候,无意间发现assert模块中JsonBody使用了 JSON Path ,兴趣使然,看了下,发现是类似解析xml用到的 XPath。通过路径来获取json对象的属性值
JSON Path提供了javascript与PHP版本
XPath表达式:/store/book[1]/title
JSON Path表达式:.store.book[0].title 或则 x['store']['book'][0]['title']
同时,官网也有提到,像javascript、Python、PHP等语言已经提供了类似JSON Path的能力了。
另外,JSON Path存在以下问题
be naturally based on those language characteristics.
cover only essential parts of XPath 1.0.
be lightweight in code size and memory consumption.
be runtime efficient.
常用的表达式
using the symbol '@' for the current object. Filter expressions are supported via the syntax
题外话:在了解JSON Path的时候,还发现了解析JSON的其他框架
传送门:http://blog.sina.com.cn/s/blog_6d425e1a01017sg4.html
JsonSQL、[b]jfunk、[b]TaffyDB、[b]linq.js、[b]objeq[/b][/b][/b][/b]
JSON Path提供了javascript与PHP版本
XPath表达式:/store/book[1]/title
JSON Path表达式:.store.book[0].title 或则 x['store']['book'][0]['title']
同时,官网也有提到,像javascript、Python、PHP等语言已经提供了类似JSON Path的能力了。
另外,JSON Path存在以下问题
be naturally based on those language characteristics.
cover only essential parts of XPath 1.0.
be lightweight in code size and memory consumption.
be runtime efficient.
常用的表达式
$.store.book[(@.length-1)].title
using the symbol '@' for the current object. Filter expressions are supported via the syntax
?(<boolean expr>)as in
$.store.book[?(@.price < 10)].title
XPath | JSONPath | Description |
/ | $ | the root object/element |
. | @ | the current object/element |
/ | . or [] | child operator |
.. | n/a | parent operator |
// | .. | recursive descent. JSONPath borrows this syntax from E4X. |
* | * | wildcard. All objects/elements regardless their names. |
@ | n/a | attribute access. JSON structures don't have attributes. |
[] | [] | subscript operator. XPath uses it to iterate over element collections and for predicates. In Javascript and JSON it is the native array operator. |
| | [,] | Union operator in XPath results in a combination of node sets. JSONPath allows alternate names or array indices as a set. |
n/a | [start:end:step] | array slice operator borrowed from ES4. |
[] | ?() | applies a filter (script) expression. |
n/a | () | script expression, using the underlying script engine. |
() | n/a | grouping in Xpath |
{ "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99 }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99 } ], "bicycle": { "color": "red", "price": 19.95 } } }
XPath | JSONPath | Result |
/store/book/author | $.store.book[*].author | the authors of all books in the store |
//author | $..author | all authors |
/store/* | $.store.* | all things in store, which are some books and a red bicycle. |
/store//price | $.store..price | the price of everything in the store. |
//book[3] | $..book[2] | the third book |
//book[last()] | $..book[(@.length-1)] $..book[-1:] | the last book in order. |
//book[position()<3] | $..book[0,1] $..book[:2] | the first two books |
//book[isbn] | $..book[?(@.isbn)] | filter all books with isbn number |
//book[price<10] | $..book[?(@.price<10)] | filter all books cheapier than 10 |
//* | $..* | all Elements in XML document. All members of JSON structure. |
传送门:http://blog.sina.com.cn/s/blog_6d425e1a01017sg4.html
JsonSQL、[b]jfunk、[b]TaffyDB、[b]linq.js、[b]objeq[/b][/b][/b][/b]
相关文章推荐
- JavaScript中DOM的层次节点(二)
- extjs createDelegate的作用
- 纯js ajax请求
- 利用JS函数制作时钟运行程序
- JavaScript规范
- JSPatch中的OC高级语法
- js事件绑定及冒泡、捕获和默认行为处理
- 利用 Fragment ,JSON,第三方开源框架实现 仿新闻界面
- jstl中处理日期格式,小数,数字,百分比 fmt
- ExtJs combobox 下拉图标
- jstl fn:replace替换换行符
- JSP类似购物车根据后台数据自动生成一行商品,点击按钮实现数量价格自动增加
- js urlencode , encodeURIComponent
- javascript 正则匹配 提取所有 preg_match_all matchAll方法
- js 判断页面加载状态
- Jsoncpp的使用
- js问的我醉的不要不要的。
- JavaScript Backdoor - 三好学生
- 清除QQ账号所有授权应用 JavaScript代码
- 周记(jsp自定义标签)