利用lua中的string.gsub来巧妙实现json中字段的正则替换
生活随笔
收集整理的這篇文章主要介紹了
利用lua中的string.gsub来巧妙实现json中字段的正则替换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
業務需求
工作中需要對某個請求的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)
運行截圖
總結
以上是生活随笔為你收集整理的利用lua中的string.gsub来巧妙实现json中字段的正则替换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Ubuntu 14.04 64bit上
- 下一篇: ATS缓存数据结构