如何根据字符串键检索 json 值

How to retrieve a json value based on a string key

我有 json 如下所示的数据:

{
    "deploy:success": 2,
    "deploy:RTX:success": 1,
    "deploy:BLX:success": 1,
    "deploy:RTX:BigTop:success": 1,
    "deploy:BLX:BigTop:success": 1,
    "deploy:RTX:BigTop:xxx:success": 1,
    "deploy:BLX:BigTop:yyy:success": 1,
}

每添加一个新 :<field> 都会使其更加具体。假设格式为“deploy:RTX:success”的密钥用于特定站点 RTX。我正计划使用过滤器来仅显示特定站点的计数。

eval column_name=if($site_token$ = "", "deploy:success", "deploy:$site_token$:success")

然后重命名派生列:

rename column_name deploy

但重命名是在第一个参数中寻找实际值,而不仅仅是列名。我一辈子都不知道如何从该列中获取关联的值。

index=cloud_aws namespace=my namespace=Stats protov3=* 
| spath input=protov3 
| eval column_name=if("$site_token$" = "", "deploy:success", "deploy:$site_token$:success") 
| rename column_name AS "deploy"

我做错了什么?

目前还不清楚最终结果应该是什么。如果 $site_token$ 为空时的结果应该是 "deploy:success" 那么只需使用 "deploy" 作为 eval.

的目标
index=cloud_aws namespace=my namespace=Stats protov3=* 
| spath input=protov3 
| eval deploy=if("$site_token$" = "", "deploy:success", "deploy:$site_token$:success")

OTOH,如果 $site_token$ 为空时的结果应为“2”,则在 eval 中使用带有单引号的现有查询。单引号告诉 Splunk 将封闭的文本视为字段名称而不是文字字符串(这是双引号的作用)。

index=cloud_aws namespace=my namespace=Stats protov3=* 
| spath input=protov3 
| eval deploy=if("$site_token$" = "", 'deploy:success', 'deploy:$site_token$:success')