考虑一个 JSON 对象,如
{
"foo": 42,
"baz": -12,
"bar{label1=\"value1\"}": 12.34
}
Run Code Online (Sandbox Code Playgroud)
由jq使用一些数据源构造。实际的键名及其数量可能会有所不同,但结果将始终是一个以数字(整数或浮点数)作为值的对象。键可以包含引号,但不能包含空格。
我可以使用 jq 将对象格式化为与Prometheus兼容的格式,以便我可以使用输出将数据推送到 Prometheus Pushgateway 吗?
所需的结果看起来像
foo 42
bar{label1="value1"} 12.34
baz -12
Run Code Online (Sandbox Code Playgroud)
即用换行符(无\r)和除标签值外没有引号的空格分隔。
我不能使用 bash 进行后处理,因此如果可能的话,我更喜欢纯 jq 解决方案。
使用keys_unsorted获得对象键(keys做同样的很好,但前者是更快),生成的字符串内插法所需的输出。
$ jq -r 'keys_unsorted[] as $k | "\($k) \(.[$k])"' file
foo 42
baz -12
bar{label1="value1"} 12.34
Run Code Online (Sandbox Code Playgroud)
而且,通过-j@peak 建议的手动添加选项和打印换行符,您可以使其便携。