如何从字符串行解析 json 对象?

How to parse json object from string line?

我是 logstash 新手。我想使用 grok 将日志文件中的每一行解析为 json 对象。我的日志如下所示:

1570519737247 I access {"date":"2019-10-08T09:28:57.247","rootTitle":"title1","rootModel":"model1","dcTitle":"[1a]"}
1570519737247 I access {"date":"2019-10-08T09:28:57.247","rootTitle":"title2","rootModel":"model2","dcTitle":"[1b]"}

您可以看到每一行都以文本开头,然后是有效的 json 对象。

我想为每一行构造对象,如下所示:

{
    "accesing": "1570519737247",
    "message": {
        "date":"2019-10-08T09:28:57.247",
        "rootTitle":"title1",
        "rootModel":"model1",
        "dcTitle":"[1a]"
        }
}

所以我想把开头的数字分配给"accesing"键,我不需要"I access"这个词,然后json对象给"message".

我在 grok 调试器 %{WORD:accesing} %{GREEDYDATA:message} 中尝试过这种模式,但当然这不是我需要的。拜托,有人可以帮忙吗?

使用这个:

%{WORD:accesing} I access %{GREEDYDATA:message}

输入:

1570519737247 I access {"date":"2019-10-08T09:28:57.247","rootTitle":"title1","rootModel":"model1","dcTitle":"[1a]"}

输出:

{
  "accesing": [
    [
      "1570519737247"
    ]
  ],
  "message": [
    [
      "{"date":"2019-10-08T09:28:57.247","rootTitle":"title1","rootModel":"model1","dcTitle":"[1a]"}"
    ]
  ]
}