Ruby日志文件解析:提取含指定URL的请求体JSON
解决日志中提取指定请求的JSON内容问题
嘿,我来帮你搞定这个JSON提取的事儿!你现在的代码能成功定位到目标行,但确实没做提取操作——咱们只需要调整一下匹配逻辑,用正则表达式来捕获你要的JSON部分就行。
首先,你的日志行结构是固定的:在包含POST https://some.url.com:8080/api/Customers/的行里,JSON内容紧跟在URL后面。我们可以用Ruby的match方法结合正则表达式,直接把这部分JSON抓出来。
修改后的代码如下:
# 如果需要解析JSON成Ruby哈希,记得引入json模块 require 'json' File.open("my_file.log", "r").each_line do |line| # 正则匹配目标请求行,同时捕获URL后的JSON内容 if match_result = line.match(/POST https:\/\/some.url.com:8080\/api\/Customers\/\s*(\{.*\})/) # 捕获组1就是我们要的JSON字符串 target_json = match_result[1] puts target_json # 要是你需要把JSON转成Ruby哈希来操作,加上下面这行就行 # parsed_json = JSON.parse(target_json) # p parsed_json end end
代码说明:
- 用
match方法替代include?,这样不仅能判断行是否符合条件,还能通过捕获组提取关键内容 - 正则表达式里的
\s*用来匹配URL和JSON之间可能存在的空格,避免因为空格导致匹配失败 (\{.*\})是捕获组,专门抓取从{到}的所有内容(也就是你要的JSON结构)
如果你的日志里域名、端口可能有变化,还可以把正则写得更通用一些,比如匹配任意包含/api/Customers/的POST请求:
line.match(/POST .*\/api\/Customers\/\s*(\{.*\})/)
这样就能轻松提取到你需要的JSON内容啦!
内容的提问来源于stack exchange,提问作者user4216977
相关产品推荐
相关产品推荐

