如何在Splunk中将嵌套JSON转换为指定格式字符串?
Splunk嵌套JSON格式转换解决方案
原始问题
现有嵌套JSON数据:
{ "info1": "val1", "info2": "val2", "UsagePerUser": { "user1": 0.1, "user2": 0.2 } }
当前查询仅能提取完整的UsagePerUserJSON对象,无法拆分为用户名+百分比的多行格式,需要将输出调整为:
info1 info2 UsagePerUser Usage % =================================== val1 val2 user1 10.0 user2 20.0 ----------------------------------- val3 val4 user3 30.0 user4 40.0
修改后的完整查询
index="my_index" source="my_source" | sort - _time | dedup Path | spath output=UsagePerUser path=UsagePerUser | eval UsagePerUser = json(UsagePerUser) // 核心转换步骤 | eval kv_pairs = mvzip(keys(UsagePerUser), values(UsagePerUser)) | mvexpand kv_pairs | eval user=mvindex(split(kv_pairs, ","), 0), usage=round(mvindex(split(kv_pairs, ","), 1)*100, 1) // 整理输出格式 | table info1, info2, user, usage | rename user AS UsagePerUser, usage AS "Usage %" | stats list(UsagePerUser) AS UsagePerUser, list("Usage %") AS "Usage %" by info1, info2
关键步骤解析
keys(UsagePerUser)+values(UsagePerUser):分别提取嵌套JSON中的用户名(键)和原始使用率(值),生成两个多值字段mvzip(keys, values):将用户名与对应使用率一一配对,生成userX,0.X格式的多值字段mvexpand kv_pairs:把多值字段的每个键值对展开为单独数据行- 数值转换:通过
*100将原始使用率(0.1)转换为百分比(10.0),round(...,1)用于保留1位小数(可按需调整或移除) stats list(...) by info1, info2:将同一info1/info2组合下的所有用户数据聚合,实现表格中分组换行的显示效果
内容的提问来源于stack exchange,提问作者Janet
相关产品推荐
相关产品推荐

