如何使用SED转换JSON中的数据格式
我有一个巨大的NDJSON文件,其中一个字段是如何使用SED转换JSON中的数据格式,json,sed,jq,Json,Sed,Jq,我有一个巨大的NDJSON文件,其中一个字段是“createDate”:“01/02/2018”。它是dd/mm/yyyy格式,我需要将其转换为yyy-mm-dd格式 我可以使用以下命令在小输入上使用sed: echo 28/02/2018 | sed 's,\([0-9][0-9]\)/\([0-1][0-9]\)/\([1-2][0-9][0-9][0-9]\),\3-\2-\1,' 但是,我找不到一个解决方案,我必须在JSON文件中执行此操作,其中该值位于名为“createDate”的键
“createDate”:“01/02/2018”
。它是dd/mm/yyyy
格式,我需要将其转换为yyy-mm-dd
格式
我可以使用以下命令在小输入上使用sed
:
echo 28/02/2018 | sed 's,\([0-9][0-9]\)/\([0-1][0-9]\)/\([1-2][0-9][0-9][0-9]\),\3-\2-\1,'
但是,我找不到一个解决方案,我必须在JSON文件中执行此操作,其中该值位于名为“createDate”
的键下
示例JSON对象如下所示:
{
"pushNotificationEnabled": "true",
"createDate": "11/08/2018",
"email": null,
"photoUrl": null
}
非常感谢您的帮助。您的命令适用于示例JSON对象!您可能希望将其操作限制在
createDate
字段:
sed '/"createDate":/s,\([0-9][0-9]\)/\([0-1][0-9]\)/\([1-2][0-9][0-9][0-9]\),\3-\2-\1,' input.json
这只会影响包含“createDate”:
标记的行:
==> input.json <==
{
"pushNotificationEnabled": "true",
"createDate": "11/08/2018",
"modifyDate": "31/08/2018",
"email": null,
"photoUrl": null
}
$ sed '/"createDate":/s,\([0-9][0-9]\)/\([0-1][0-9]\)/\([1-2][0-9][0-9][0-9]\),\3-\2-\1,' input.json
{
"pushNotificationEnabled": "true",
"createDate": "2018-08-11",
"modifyDate": "31/08/2018",
"email": null,
"photoUrl": null
}
==>input.json假设NDJSON文件中的每个对象都可以轻松地放入内存中,那么不管文件本身有多大,只要调用下面的代码就可以了,因为jq(默认情况下)一次只能读取一个json实体:
jq '.createDate |=
sub("^(?<m>[0-9]*)/(?<d>[0-9]*)/(?<y>[0-9]*)"; "\(.y)-\(.m)-\(.d)")' input.json
jq'.createDate|=
sub(“^(?[0-9]*)/(?[0-9]*)/(?[0-9]*)”;“\(.y)-\(.m)-\(.d)”)input.json
尽管jq的效率可能比sed稍低,但它确实理解JSON。非常感谢您的解决方案!