如何使用SED转换JSON中的数据格式

如何使用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”的键

我有一个巨大的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”
的键下

示例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。

非常感谢您的解决方案!