私はこのように見えるいくつかのjsonを持っています(非常に単純化されています):
{"files":[
{"date":"2018-01-08T11:38:36+00:00"},
{"date":"2018-01-08T11:38:27+00:00"},
{"date":"2018-01-07T20:02:12+00:00"},
{"date":"2018-01-07T18:23:26+00:00"}
]}
日付をエポック秒に変換して、並べ替えることができます。ただし、この形式は、strptimeが受け入れるものと完全には一致しません。
$ jq '.files[] | .date |= strptime("%Y-%m-%dT%H:%M:%S%z")' files.json
jq: error (at files.json:6): date "2018-01-08T11:38:36+00:00" does not match format "%Y-%m-%dT%H:%M:%S%z"
したがって、最後の5文字を削除するだけで、%zを除いた同じ形式を使用できます。これは機能します:
$ jq '.files[] | .date[0:19]' files.json
"2018-01-08T11:38:36"
"2018-01-08T11:38:27"
"2018-01-07T20:02:12"
"2018-01-07T18:23:26"
だから、私はここで何が間違っているのですか?
$ jq '.files[] | map( .date |= .date[0:19] )' files.json
jq: error (at files.json:6): Cannot index string with string "date"
@peakのおかげで私はそれがうまくいった:
$ jq -c '.files[] | .date |= .[0:19]' files.json
{"date":"2018-01-08T11:38:36"}
{"date":"2018-01-08T11:38:27"}
{"date":"2018-01-07T20:02:12"}
{"date":"2018-01-07T18:23:26"}
jq'.files [] | map(.date | = .date [0:19]) 'files.json
上記には少なくとも2つの問題があります。
あなたは書くことができます.date = .date[0:19]
、または(より良い):.date |= .[0:19]
何が必要かは完全には明確ではありませんが、目標が単にJSONを編集することである場合、1つのオプションは次のようになります。
.files |= map( .date |= .[0:19] )
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加