我有一些看起来像这样的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"}
答案 0 :(得分:2)
jq'.files [] | map(.date | = .date [0:19])'files.json
上述问题至少存在两个问题。
您可以写.date = .date[0:19]
或(更好):.date |= .[0:19]
目前还不完全清楚你想要什么,但如果目标只是编辑JSON,那么一个选项就是:
.files |= map( .date |= .[0:19] )