Как конвертировать формат данных в JSON с помощью SED - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть огромный файл NDJSON, в котором одно поле равно "createDate":"01/02/2018". Он в формате dd/mm/yyyy, и мне нужно преобразовать его в формат yyyy-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
  }

Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Предполагая, что каждый объект в файле NDJSON будет удобно помещаться в памяти, вызов в следующих строках должен выполнять свою работу, независимо от размера самого файла, поскольку jq будет (по умолчанию) ) только чтение в одном объекте JSON за раз:

jq '.createDate |=
    sub("^(?<m>[0-9]*)/(?<d>[0-9]*)/(?<y>[0-9]*)"; "\(.y)-\(.m)-\(.d)")' input.json

Хотя jq может быть несколько менее эффективным, чем sed для этой задачи, он понимает JSON.

0 голосов
/ 07 сентября 2018

Ваша команда работает с вашим образцом объекта 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
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...