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

时间:2015-05-21 15:29:55

标签: json bash jq

我拖尾了一些日志,并且为了能够更轻松地阅读它们,我使用了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"
  }
}

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

.stream |= fromjson

答案 1 :(得分:0)

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

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

你把那个输入用管道传送到 jq 就像 | jq -r .message