2019/05/12

JSON in JSON がデリミタで連結されて JSON に入ってる場合

[jl] [perl]

jl 書いて、なんか JSON in JSON なログを再帰的に parse して見やすくなったぜー!っと思ってたらなんかログのフォーマット変えられてしまって、JSON in JSON な文字列が他のログ情報とデリミタで連結したやつで値に突っ込まれるようになってた。

例えばこんなん。

echo '{"message":"[05/09/2019 23:51:51]\t[warn]\t{\"foo\":\"bar\"}"}'

値のところがタブ区切りで 日時 ログレベル JSON となってる。

これはまいった。

まじまいった。

シンプルに JSON in JSON なら parse できるんだけど TEXT + JSON in JSON はちょっとカバーできてなかった。また目parseに逆戻りだぜ。

とまあ、でもこういうログもよくありそうなやつなんで、なんかさらっと見やすくしました(主観)。

-x オプションをつけると、先にデリミタで分割してarraynizeして、そこから JSON を再帰的にデコードします(下の例はただのJSONだけど、JSON in JSONになっててももちろん大丈夫)。

$ echo '{"message":"[05/09/2019 23:51:51]\t[warn]\t{\"foo\":\"bar\"}"}' | jl -x
{
   "message" : [
      "[05/09/2019 23:51:51]",
      "[warn]",
      {
         "foo" : "bar"
      }
   ]
}

App:jl 使ってみてくだしあ。

サイト内検索