Извлечение данных из вложенного JSON для CSV - PullRequest
0 голосов
/ 18 июня 2019

У меня есть файл JSON, который я скачал через API, и мне нужно извлечь из него определенные данные.Мне нужно извлечь только 12 из 32 доступных значений - некоторые из этих значений являются вложенными.Я считаю, что мне нужно создать своего рода «шаблон», пройтись по JSON, чтобы извлечь некоторые значения из вложенного массива, получить нужные элементы и создать загружаемый файл CSV с этими элементами.Я только балуюсь JS, и я ищу руководство, как я должен подходить к этому вопросу.Я уже пробовал papaparse, и я могу создать загружаемый CSV, но это плоский файл, и я не могу видеть вложенные массивы.Кроме того, я не могу правильно пометить некоторые уникальные поля (см. Ниже).

** Предостережение ** Один из массивов в объекте JSON имеет только идентификаторы для идентификации значения.Например, в CSV мне нужно иметь возможность сказать, что id 3800208 означает «цвет», что означает, что в CSV заголовок столбца должен сказать «Color» с соответствующим значением.В примере JSON вы увидите, что массив «bespoke_fields» содержит эти вложенные значения, которые я хочу.

Я действительно надеюсь, что кто-то подскажет мне лучший способ перебрать этот JSON и получить только данныеЯ хочу и создать CSV, который можно загрузить.Вот пример JSON.Мне нужно извлечь id, create_at, updated_at, subject, status, type, requestter_id, company_id, has_items и три значения из массива bespoke_fields и отобразить его в плоском CSV.

"referrals": [
        {
            "url": "https://api.website.com/my.json",
            "id": 23487,
            "created_at": "2019-05-09T15:06:47Z",
            "updated_at": "2019-05-14T18:12:04Z",
            "type": "request",
            "subject": "Cum ceteris in veneratione tui montes, nascetur mus.",
            "description": "Fabio vel iudice vincam, sunt in culpa qui officia.",
            "priority": "low",
            "status": "new",
            "recipient": null,
            "requester_id": 142,
            "submitter_id": 142,
            "assignee_id": null,
            "company_id": 5498,
            "group_id": 3548,
            "co_ids": [],
            "follow_ids": [],
            "email_cc_ids": [],
            "forum_topic_id": null,
            "issue_id": null,
            "has_items": false,
            "is_public": true,
            "deadline_at": null,
            "tags": [
                "fix",
                "this",
                "now"
            ],
            "bespoke_fields": [
                {
                    "id": 3800208,
                    "value": null
                },
                {
                    "id": 3600194,
                    "value": "bluesteel"
                },
                {
                    "id": 3700205,
                    "value": null
                },
                {
                    "id": 3100209,
                    "value": null
                },
                {
                    "id": 3200192,
                    "value": "fix-needed"
                },
                {
                    "id": 3300194,
                    "value": "mistakes"
                }
            ],
            "return_ids": [],
            "identifier_id": 5482,
            "customer_identifier": 5688,
            "user_track": null,
            "allow_files": true
        },

Вот текущая реализация ... Я включил библиотеку papaparse и добавил ее на свою страницу, где 'requestData' - моя переменная JSON:

function downloadCSV() {

    var csv = Papa.unparse(requestData);

    var csvData = new Blob([csv], {type: 'text/csv;charset=utf-8;'});
    var csvURL;
        csvURL = window.URL.createObjectURL(csvData);

    var referralLink = document.createElement('a');
        referralLink.href = csvURL;
        referralLink.setAttribute('download', 'downloadable.csv');
        referralLink.click();
}

Я хотел бы получитьCSV, в котором есть те 12 столбцов, о которых я упоминал, с соответствующими данными из объекта JSON.

Образец вывода SCV, который я ищу

Вот началоЯ пишу функцию, чтобы сопоставить идентификаторы полей JSON с реальными именами в заголовках CSV.Но я застреваю с логикой.

    function appendData(requests) {
        var fieldTypes = {
            3600194: 'version',
            3200192: 'request_type',
            3300194: 'cause'
        };
...