博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用lua中的string.gsub来巧妙实现json中字段的正则替换
阅读量:4185 次
发布时间:2019-05-26

本文共 1812 字,大约阅读时间需要 6 分钟。

业务需求

工作中需要对某个请求的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)
运行截图

你可能感兴趣的文章
骗稿费
查看>>
书讯 -- 一致化对象与数据的存取 LINQ
查看>>
书讯 -- Microsoft Windows Workflow Foundation Step by Step
查看>>
书讯 -- Essential Business Process Modeling
查看>>
报告班长,我们听不懂
查看>>
SOA 的应用 -- BPM
查看>>
书讯 -- Training Kit:SQL Server 2005 实作与维护 I II
查看>>
书评 -- Inside Microsoft SQL Server 2005 : T-SQL Querying,T-SQL Programming
查看>>
书评 -- Inside Microsoft SQL Server 2005 : The Storage Engine
查看>>
书评--设计模式入门
查看>>
信息花园
查看>>
书评 -- 唯有优秀的团队,才有优秀的成绩
查看>>
从历史学习的 8 堂架构课
查看>>
服务导向架构(Service Oriented Architecture SOA)
查看>>
书评 -- Microsoft SQL Server 2005 Integration Services
查看>>
书评 -- Professional SQL Server 2005 Reporting Services
查看>>
over engineer
查看>>
书评 -- Programming Microsoft ASP.NET 2.0 Application Advanced Topics
查看>>
撰写信息书籍注意事项
查看>>
书评--规划极致软件制程(Planning Extreme Programming)
查看>>