用 JavaScript 对 JSON 进行模式匹配 (Part 1 - 设计)
在《从 if else 到 switch case 再到抽象》这篇文章里面说到,解决 if else 和 switch case 分支过多的一个方法,就是做一个专用的 dispatcher ,让它来负责进行筛选与转发。至于筛选条件的描述,模式匹配是一种很常见也很好用的方式。在 JavaScript 里面,用 JSON 来描述模式又是相当方便的事情,所以我们来做一个 JSON 模式匹配工具吧。
用例设计
作为一个 dispatcher ,我们只需要两个方法: notify 和 capture 。一个最简单的用例是这样的:
Dispatcher.capture({
"status": 200,
"command": "message"
}, function(json) { /* display message */ });
Dispatcher.notify({
“status": 200,
"command": "message",
"content": {
"from": "user1",
"to": "user2",
"text": "hello"
}
});
当然,只有局部的全等匹配是不够的,我们还需要一些其他运算符。
Dispatcher.capture({
"value1$eq": "hello", /* equal */
"value2$ne": true, /* not equal */
"value3$lt": 0, /* less than */
"value4$lte: 1, /* less than or equal */
"value5$gt": 2, /* greater than */
"value6$gte": 3, /* greater than or equal */
"value7$in": [1, 3, 5, 7, 9], /* in */
"value8$nin": [2, 4, 6, 8, 10], /* not in */
"value9$all": [1, 2, 3, 4, 5], /* all */
"value10$ex": true, /* exists */
"value11$re": /^A.*/, /* regular expression */
"value12$ld": function(json) { return true; } /* lambda */
}, function(json) {});
Dispatcher.notify({
"value1": "hello",
"value2": false,
"value3": -1,
"value4": 1,
"value5": 3,
"value6": 3,
"value7": 5,
"value8": 5,
"value9": [1, 3, 5, 2, 4],
"value10": "hello",
"value11": "A13579",
"value12": "anything"
})
随手写下来一堆运算符,看起来实现
建议继续学习:
- JSON和JSONP的区别 (阅读:8234)
- XML和JSON (阅读:7499)
- 如何编写一个JSON解析器 (阅读:6119)
- 理解JSON:3分钟课程 (阅读:5539)
- 前端模板引擎 (阅读:4378)
- 用 JavaScript 对 JSON 进行模式匹配 (Part 2 - 实现) (阅读:4469)
- Ajax和WEB服务数据格式:JSON JSONP (阅读:4299)
- [python]定制JSON中的浮点数格式 (阅读:3682)
- JSON对象和字符串之间的相互转换 (阅读:3497)
- 让Json更懂中文(JSON_UNESCAPED_UNICODE) (阅读:3551)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Cat Chen 来源: Cat in dotNET
- 标签: JSON 模式匹配
- 发布时间:2011-09-07 23:19:05
-
[1182] WordPress插件开发 -- 在插件使用 -
[74] 解决 nginx 反向代理网页首尾出现神秘字 -
[43] web开发设计人员不可不用的在线web工具和 -
[38] Java开发岗位面试题归类汇总 -
[31] 一句话crontab实现防ssh暴力破解 -
[31] Rax 系列教程(长列表) -
[30] 手机产品设计方向 -
[27] 程序员疫苗:代码注入 -
[27] 如何建立合适的索引? -
[26] oracle技术方面的路线
