Json 如何用该值的子字符串替换该值?

Json 如何用该值的子字符串替换该值?,json,string,edit,jq,in-place,Json,String,Edit,Jq,In Place,我有一些json看起来像这样(非常简化): 我想将日期转换为历元秒,以便对它们进行排序。但是这种格式与strtime将接受的格式不太匹配: $ 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" 所以

我有一些json看起来像这样(非常简化):

我想将日期转换为历元秒,以便对它们进行排序。但是这种格式与strtime将接受的格式不太匹配:

$ 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

还不完全清楚您想要什么,但如果目标只是编辑JSON,那么一个选项是:

.files |= map( .date |= .[0:19] )

我就是这么做的。。。最后一个例子,就在“我做错了什么”之后。我剪贴了你的,以防万一我漏掉了什么,同样的输出。我以为你会在第一个错误修复后发现第二个错误。我只问一个错误,就是我用“.files[]| map…”得到的错误。除非您知道一个strtime格式字符串将适用于我在json文件中的格式,否则第二个错误将变得毫无意义。“.files | map…”版本可以从命令行运行,但我正在构建的查询在其他过滤器之后有此功能,因此我认为需要使.files[]版本工作。不过,你给了我另一个探索的途径。带有“|=.date[0:19]”的突出显示版本不起作用。您在下面提供的两个选项确实有效。非常感谢。如果您要修复突出显示的版本,我会将此标记为已回答。
.files |= map( .date |= .[0:19] )