业务需求

工作中需要对某个请求的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中字段的正则替换相关推荐

  1. python读取路径中字符串_python实现提取str字符串/json中多级目录下的某个值

    字符串多级目录取值: 比如说: 你response接收到的数据是这样的. 你现在只需要取到itemstring 这个字段下的值.其他的都不要! 思路就是:字符串是个json格式(或转为json格式), ...

  2. 【开发环境】Ubuntu 中使用 VSCode 开发 C/C++ ⑤ ( tasks.json 中的 args 数组配置分析 | 编译并执行 C++ 程序 )

    文章目录 一.tasks.json 中的 args 数组配置分析 二.编译并执行 C++ 程序 可以参考官方提供的文档 : https://code.visualstudio.com/docs/cpp ...

  3. java获取json中的某个值_接口测试之json中的key获取

    在很多情况下我们在进行接口测试的时候都会有获取上个接口返回的json数据中的某个key值,然后下个接口调用这个key值.今天给大家讲解一下针对不同类型的json获取某个key的值. 一.首先是单纯ob ...

  4. python怎么索引json中的值_使用Python在JSON中查找值

    我之前已经成功地解析了JSON文件中的数据,但现在我要实现的函数遇到了问题.我有一个JSON格式的姓名.身份证号码和出生日期列表.我想在Python中得到的是让用户输入一个名字并检索他的身份证号码和出 ...

  5. lua的string.gsub初使用

    今天在学习lua,熟悉项目代码的过程中,发现string.gsub好高级,所以在此mark下. 以下是lua5.1的官方文档介绍. string.gsub (s, pattern, repl [, n ...

  6. java string对象放在什么区域_java中String对象的存储位置

    packagetest.string.equal;public classMain {/**创建了三个对象,"helloworld对象创建在常量池中",每次new String() ...

  7. lua正则替换_lua 字符串 正则表达式 转义 特殊字符

    string.gsub 函数有三个参数:目标串,模式串,替换串. 基本作用是用来查找匹配模式的串,并将使用替换串其替换掉: s = string.gsub("Lua is good" ...

  8. java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?

    java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...

  9. java json 修改字段_我们如何使用Java中的Jackson来更改JSON中的字段名称?

    杰克逊注释@JsonProperty上使用期间的属性或方法的序列或反串行化的JSON.它带有一个可选的' name '参数,当属性名称与JSON中的' key '名称不同时,该参数很有用.默认情况下, ...

最新文章

  1. nil slice 和 空 slice
  2. 4分钟极速甩脂训练!抛开借口!繁忙族必备!
  3. (转载)VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解)
  4. 曝!BAT大厂NLP学习进阶之法~
  5. Chrome扩展应用Angular state inspector的使用方法
  6. pycharm中python的默认安装路径_mac PyCharm添加Python解释器及添加package路径的方法...
  7. 多线程中的事务回滚,你真的用对了吗?
  8. 只安装oracle服务端连plsql,Oracle 不安装Oracle客户端,使用PLSQL连接Oracle服务器
  9. 使用webService时,gsoap数据类型注意事项
  10. 程序员面试宝典问题及解析
  11. HTTPSConnectionPool(host=‘api.github.com‘, port=443): Max retries exceeded with url
  12. 51单片机C语言智能小车,基于51单片机智能小车的设计与实现
  13. win10 共享文件夹 nplayer查看共享文件
  14. C++在指定目录生成txt文件
  15. [解决Chrome禁止发送不安全的内网网络请求](ERR_FAILED)(How to fix Chrome block your insecure private network requests)
  16. 广州某IT公司HR招开发:“不加班的都是垃圾 ”
  17. 网络互连有何实际意义?进行网络互连时,有哪些共同的问题需要解决?
  18. node用mongodb还是mysql,Node 操作 mongoDB 数据库和 mySQL数据库
  19. ggplot绘制置信区间 与 分组绘图技巧
  20. rust php 扩展,在PHP程序中使用Rust扩展的方法_php技巧

热门文章

  1. Go 学习笔记(13)— 指针定义、指针特点、空指针、指针数组、指向指针的指针、指针作为函数入参
  2. Windows Phone开发(16):样式和控件模板
  3. 制作nginx和php的rpm包
  4. 正则表达式用户名密码电话身份证Email使用
  5. Python笔记(2)函数
  6. LoadRunner中log的使用总结
  7. 将ADS1.2的工程迁移到KEIL上-基于2440
  8. 上交三月月赛[SJTU] 1106 sudoku
  9. JavaScript时间日期格式化
  10. predicate 列存储索引扫描_在SQL SERVER中导致索引查找变成索引扫描的问题分析