日志中嵌套字符串 json 的漂亮打印

Pretty print of nested stringified json in logs

我正在跟踪一些日志,为了能够更轻松地阅读它们,我使用了 jq (http://stedolan.github.io/jq/),但是要么它遗漏了什么,要么我不知道如何做我需要的要做。

所以所有行都是 json,目前我正在做:

tail -f /path/to/log | jq .

问题是,有时候,我有这样的东西(记录 http 响应时):

{
  "foo": "bar",
  "fi": "bo",
  "stream": "{\n  \"json\": \"asAString\"\n}"
}

很明显,我想以这样的方式结束:

{
  "foo": "bar",
  "fi": "bo",
  "stream": {
    "json": "asAString"
  }
}

虽然我们可以假设我第一次知道需要以特定方式处理的字段的具体名称,但如果您有自动处理的方式:-)

谢谢!

那不是嵌套对象...它是 json 字符串。它已经印得很漂亮了。如果这是你想要的,你需要解析字符串。

.stream |= fromjson

对我来说,有效的方法是获取您的 json 字符串并使用 -r(原始)标志将其通过管道传输到 jq。例如,如果您有一个 json 对象,其中的值是一个长字符串化的日志消息,例如

{"message":"some long string with \"escaped characters \n"}

你接受那个输入并将它传送到 jq 就像 | jq -r .message