Как преобразовать массив JSON в объект JSON и записать его в файл с помощью сценария оболочки? - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть приведенный ниже формат файла JSON с массивом issues[], и я попытался использовать его для Kibana.Но, к сожалению, Kibana не поддерживает вложенные объекты и массивы, и есть плагин для использования, так что мне нужно понизить версию, что я не могу сделать прямо сейчас, потому что в этом случае я потеряю все свои данные.

Пример данных:

{
    "expand": "schema,names",
    "startAt": 0,
    "maxResults": 50,
    "total": 4,
    "issues": [{
            "expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
            "id": "1999875",
            "self": "https://amazon.kindle.com/jira/rest/api/2/issue/1999875",
            "key": "KINDLEAMZ-67578",
               "fields": {
                "summary": "contingency is displaying for confirmed card.",
                "priority": {
                    "name": "P1",
                    "id": "1"
                },
                "created": "2019-09-23T11:25:21.000+0000"
            }
        },
        {
            "expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
            "id": "2019428",
            "self": "https://amazon.kindle.com/jira/rest/api/2/issue/2019428",
            "key": "KINDLEAMZ-68661",
            "fields": {
                "summary": "card",
                "priority": {
                    "name": "P1",
                    "id": "1"
                },
                "created": "2019-09-23T11:25:21.000+0000"
            }
        },
        {
            "expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
            "id": "2010958",
            "self": "https://amazon.kindle.com/jira/rest/api/2/issue/2010958",
            "key": "KINDLEAMZ-68167",
            "fields": {
                "summary": "Test Card",
                "priority": {
                    "name": "P1",
                    "id": "1"
                },
                "created": "2019-09-23T11:25:21.000+0000"
            }
        }
    ]
}

Поэтому я просто планировал реструктурировать эту полезную нагрузку, как все issues[], в объект и записать ее в отдельный файл.Чтобы я мог избежать этой проблемы.

Ожидаемый результат:

Для приведенных выше примеров данных у меня есть 4 записи в issues[].length, поэтому я просто хочу создать 4 разныхфайлы в следующем формате:

File1.json:

{
"key": "KINDLEAMZ-67578",
"summary": "contingency is displaying for confirmed card.",
"name": "P1",
"created": "2019-09-23T11:25:21.000+0000"
}

Таким же образом я хочу зациклить другие массивы и получить значения, как указано выше, и записатьв File2.json, File3.json и File4.json.

Поскольку данные являются динамическими, и поэтому я просто хочу, чтобы создание этого файла происходило на основе длины массива issues[].

Isтам в любом случае, чтобы достичь этого с помощью сценария оболочки?Или любую библиотеку CLI.

Пожалуйста, сообщите мне.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Использование GNU awk и расширения gawk-json:

awk '
@load "json"
{
    lines=lines $0

    if(json_fromJSON(lines,data)==1){
        for(i in data["issues"]) {
            out["key"] = data["issues"][i]["key"]
            out["summary"] = data["issues"][i]["fields"]["summary"]
            out["created"] = data["issues"][i]["fields"]["created"]
            out["name"] = data["issues"][i]["fields"]["priority"]["name"]

            file="file" i ".json"
            print json_toJSON(out) > file
            close(file)
            delete out
        }
    }
}' file.json

Вывод:

$ cat file1.json | jq '.'                # useless use of cat but used to emphasize
{
  "created": "2019-09-23T11:25:21.000+0000",
  "key": "KINDLEAMZ-67578",
  "summary": "contingency is displaying for confirmed card.",
  "name": "P1"
}
0 голосов
/ 27 сентября 2019

Укажите -c / - флаг компактного вывода, чтобы jq поместил каждый объект в одну отдельную строку, а затем с помощью awk записал каждую строку в отдельный файл.

jq -c '.issues[] | {
  key,
  summary: .fields.summary,
  name:    .fields.priority.name,
  created: .fields.created
}' file | awk '{
  f = ("file" NR ".json")
  print > f
  close(f)
}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...