Perl正则循环匹配:将HAR文件QueryString/Params转为HTTP查询串
正则替换实现方案
直接运行如下Perl命令即可完成HAR文件的指定字段转换,全程不会改动文件中其余JSON结构:
perl -0777 -i.bak -pe 's/"(QueryString|Params)":\[(?:\{"Name":"(.*?)",\s*"Value":"(.*?)"\},?\s*)*\]/ $field = $1; @kv_pairs; pos($_) = $-[0]; while (/\G.*?\{"Name":"(.*?)",\s*"Value":"(.*?)"\}/g) { push @kv_pairs, "$1=$2"; } "\"$field\":\"" . join("&", @kv_pairs) . "\"" /ge' target.har
参数说明
-0777:将整个文件作为单个字符串读入,支持匹配跨行的JSON数组结构-i.bak:原地修改文件前自动生成后缀为.bak的备份,避免操作失误损坏原文件,不需要备份直接改成-i即可- 正则替换使用
/g修饰符全局匹配所有目标字段,/e修饰符将替换逻辑作为Perl代码动态执行 - 匹配逻辑会自动覆盖两种场景:
- 数组内存在多组Name/Value对时,按
key=value格式拼接后用&连接为标准查询串 - 匹配到空数组
[]时,自动拼接为空字符串,符合转换要求
- 数组内存在多组Name/Value对时,按
转换示例
输入非空字段:
"QueryString":[{"Name":"IsOrdered", "Value":"1"}, {"Name":"TimeStamp", "Value":"11654116426247"}]
输出结果:
"QueryString":"IsOrdered=1&TimeStamp=11654116426247"
输入空字段:
"QueryString":[]
输出结果:
"QueryString":""
提示:如果待处理的Name/Value中包含
&、=、中文等特殊字符,可以在拼接键值对时对值做URI编码,避免生成的查询字符串格式错误。
内容的提问来源于stack exchange,提问作者xpt
相关产品推荐
相关产品推荐

