如何用该值的子字符串替换该值?
How do I replace a value with a substring of that value?
我有一些 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
以上至少有两个问题
您可以写 .date = .date[0:19]
,或者(更好):.date |= .[0:19]
尚不完全清楚您想要什么,但如果目标只是编辑 JSON,那么一个选项是:
.files |= map( .date |= .[0:19] )
我有一些 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
以上至少有两个问题
您可以写 .date = .date[0:19]
,或者(更好):.date |= .[0:19]
尚不完全清楚您想要什么,但如果目标只是编辑 JSON,那么一个选项是:
.files |= map( .date |= .[0:19] )