[小ネタ] JSON の timestamp 形式データを date 形式に変換する

2020.03.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは、川原です。

JSONを扱うREST APIと戯れる開発をしている timestamp 形式の時刻データをよく見かけるのですが、ぱっと見てどの日時を示しているのかがわからないので調査やデバッグが面倒です。 そこで、timetamp形式のデータをdate形式に変換(フィルタ)する簡単なスクリプト: timestamp2date_filter を書いたので共有します。

スクリプト

オブジェクトの key に timestamp という文字列を含む場合に、value のタイムタンプ(ミリ秒)をdate形式の文字列に変換して出力する、という単純なものです。

スクリプトの使い方

使い方は下記のような感じで、JSONファイルをパイプ経由でスクリプトに渡すだけです。

$ cat test.json
{
  "ただのstring": "xxxx",
  "dateに変換される_timestamp": 1478444410001,
  "dateに変換される_timestamp_to": 1478444420002,
  "dateに変換される_timestamp_from": 1478444430003,
  "dateに変換される_timestamp_": 1478444400001,
  "dateに変換されない_time_stamp":1478444400001
}
$ cat test.json | ~/bin/timestamp2date_filter
{
  "ただのstring": "xxxx",
  "dateに変換される_timestamp": "2016-11-07T00:00:10.001 +0900",
  "dateに変換される_timestamp_to": "2016-11-07T00:00:20.002 +0900",
  "dateに変換される_timestamp_from": "2016-11-07T00:00:30.003 +0900",
  "dateに変換される_timestamp_": "2016-11-07T00:00:00.001 +0900",
  "dateに変換されない_time_stamp":1478444400001
}

jq と併用する場合の注意点として、カラーフィルターには対応していないので、-M オプションを指定して一旦、モノクロ形式にしてからスクリプトに渡す必要がああります。

$ cat test.json |jq -M . | ~/bin/timestamp2date_filter
{
  "ただのstring": "xxxx",
  "dateに変換される_timestamp": "2016-11-07T00:00:10.001 +0900",
  "dateに変換される_timestamp_to": "2016-11-07T00:00:20.002 +0900",
  "dateに変換される_timestamp_from": "2016-11-07T00:00:30.003 +0900",
  "dateに変換される_timestamp_": "2016-11-07T00:00:00.001 +0900",
  "dateに変換されない_time_stamp": 1478444400001
}

また、Zsh を使っている場合に alias -g JDC='|jq -M . | ~/bin/timestamp2date_filter |jq .' という Global Alias を定義しておくと(bash等でも似たような処理はると思いますが)、↓こんな風に簡単に変換できます。

$ cat test.json JDC
{
  "ただのstring": "xxxx",
  "dateに変換される_timestamp": "2016-11-07T00:00:10.001 +0900",
  "dateに変換される_timestamp_to": "2016-11-07T00:00:20.002 +0900",
  "dateに変換される_timestamp_from": "2016-11-07T00:00:30.003 +0900",
  "dateに変換される_timestamp_": "2016-11-07T00:00:00.001 +0900",
  "dateに変換されない_time_stamp": 1478444400001
}