利用lua中的string.gsub来巧妙实现json中字段的正则替换
来源:互联网 发布:免费博客绑定域名 编辑:程序博客网 时间:2024/05/03 21:40
业务需求
工作中需要对某个请求的json响应中的某个字段进行替换, 通常想到的方法是,先使用lua的cjson模块解析该json响应, 取出该json字段再该改写它的值.
在这样实现的过程中,遇到一些问题,表现如下:
(1).上面的方法需要经过json解码, 修改字段值, json编码的过程, 在json编码过程中, 会将完整的url进行转义,比如
http://101.227.23.53/videos/v0/20151026/88/fc/8adcec584a283b2ce0aacb15092918f5.mp4
会被转义为
http:\/\/101.227.23.53\/videos\/v0\/20151026\/88\/fc\/8adcec584a283b2ce0aacb15092918f5.mp4
这不是我们需要的,因为我们还需要将\去掉,比较繁琐;
(2).有些响应是js片段, 而不是标准的json
这样套用cjson处理的话,将会出错, 而且实际线上的情况非常复杂, 异常处理非常不好处理, 比如, 可能返回这样的响应
var videoUrl={code:"A00000",data:{"l":"http://101.227.23.53/videos/v0/20151026/88/fc/8adcec584a283b2ce0aacb15092918f5.mp4?key=8446d65833da155a&src=iqiyi.com&qypid=411714900_33&v=851447025&qd_src=app&qd_tm=1463727282000&qd_ip=117.146.18.238&qd_sc=ebde1fe754678856abc597e7c689b19e&mbd=10020202ddf238a3ed4b7fbac0e1c989_4.9.1_&uuid=759240d6-573eb992-3d","t":"CMNET|XinJiang-117.146.64.214","z":"xinjiang_cmnet","h":"0","e":"0"}};
或者
[{"fileid":"030008070057160DFAB40F32C1770EA3DF4CF3-E4DF-28B8-FCCE-3EDFBEB73802.mp4","server":"http://111.206.106.204/youku/69780130BBF468394EFD494E56/030008070057160DFAB40F32C1770EA3DF4CF3-E4DF-28B8-FCCE-3EDFBEB73802.mp4"}]
解决方法
放弃json的解码和编码, 直接采用字符串的正则匹配替换.这样处理更简练
下面是处理源码
#!/usr/bin/luafunction mod_hosts(h, s) return h .. "10.10.110.162:8081/" .. s .. "/acjf92lbq/"end--利用正则匹配来替换指定部分的host字段s = 'var videoUrl={code:"A00000",data:{"l":"http://101.227.23.53/videos/v0/20151026/88/fc/8adcec584a283b2ce0aacb15092918f5.mp4?key=8446d65833da155a&src=iqiyi.com&qypid=411714900_33&v=851447025&qd_src=app&qd_tm=1463727282000&qd_ip=117.146.18.238&qd_sc=ebde1fe754678856abc597e7c689b19e&mbd=10020202ddf238a3ed4b7fbac0e1c989_4.9.1_&uuid=759240d6-573eb992-3d","t":"CMNET|XinJiang-117.146.64.214","z":"xinjiang_cmnet","h":"0","e":"0"}};'l = string.gsub(s, '(\"l\"%s*:%s*\"http://)(.-)/', mod_hosts("%1", "%2"))print(l)
运行截图
0 0
- 利用lua中的string.gsub来巧妙实现json中字段的正则替换
- lua string.gsub 替换ios 路径失败
- 在C中调用lua的内置函数string.gsub
- Lua 字符串替换函数 string.gsub(s, pat, repl [, n])
- Lua 字符串替换函数 string.gsub(s, pat, repl [, n])
- Lua 字符串替换函数 string.gsub(s, pat, repl [, n])
- Lua 字符串替换函数 string.gsub(s, pat,
- lua语言-string.gsub
- 利用lua中的closure来实现lua迭代器以及用泛型for实现lua的无状态迭代器
- ruby中gsub和gsub!的区别
- linux中字段截取、替换等awk及sub/gsub使用
- string.gsub参数中包含%符号的问题
- SQL中如何把一个表中的字段值用另外一表中相应字段的值来替换
- 利用正则表达式来查找成员字段的赋值
- 运用spinner和正则表达式pattern来实现文字中表情文字的替换
- string.gsub
- 巧妙利用“宏”来编辑QT中的信号和槽
- 在C#中如何利用正则表达式来获取网页中的所有链接的链接标题
- ExpandableListView 单组展开关闭
- Design Patterns Overview
- Magento: Item (Mage_Sales_Model_Order) with the same id “1” already exist
- (自用)利用SQL快速拼接参数列表
- Linux下安装nginx时出现“cp: "conf/koi-win" 与"/usr/local/nginx/conf/koi-win" 为同一文件”的解决方法:
- 利用lua中的string.gsub来巧妙实现json中字段的正则替换
- ImageLoader的使用
- html5 自定义文件上传
- HTTP 消息头
- 硬盘装系统2
- Android SDK manger / AVD manager使用
- 原码, 反码, 补码 详解
- 手工注入方法,方便大家测试注入点
- 硬盘安装系统1