Как я могу получить доступ к данным детей в ответе JSON, используя Javascript / GAS - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь получить доступ к дочерним данным из ответа Json, чтобы использовать их в выражении , если , но я не знаю, как. Кто-нибудь знает, как это сделать?

Вот снимок экрана с ответом, и я обвел объект, к которому я хочу получить доступ. Я хочу, чтобы происходило только суммирование, если утверждение имеет значение, т. Е. статус должен быть в состоянии ожидания или утверждения, в противном случае вычисления не будут выполняться.

enter image description here

Вот код, который я использую, но не знаю, как получить доступ к Approaval = {data = [{status}] из JSON, чтобы использовать его

function showTimeData() {

    var users = getUsers()
    var endpoint = 'users/';
    var time_array = [];

    for (var i = 0; i < users.length; i++) {

        var url = 'https://api.10000ft.com/api/v1/users/' + users[i].id + '/time_entries?fields=approvals' + '&from=' + from + '&to=' + to + '&auth=' + TKF_AUTH;
        var response = UrlFetchApp.fetch(url, options);
        var info = JSON.parse(response.getContentText());
        var content = info.data;
        var total_hours = 0;


        for (var j = 0; j < content.length; j++) {
            if (content.data.approvals.data.length > 0) {
                hoursTotal = 0;
            }
            total_hours += parseInt(content[j].hours);
        }


        Logger.log('User name: ' + users[i].display_name + ' ' + 'User id: ' + users[i].id + '  ' + 'total hours: ' + total_hours)
    }

1 Ответ

2 голосов
/ 26 января 2020

Прежде всего. Вам нужно исправить ошибку (упомянутую в чате в комментариях): замените

if (content.data.approvals.data.length > 0) {
  hoursTotal = 0;
}

на

if (content[j].approvals.data.length > 0) {
  hoursTotal = 0;
}

. Тогда вам нужно:

content[0].approvals.data[0].status

или массив status es:

content[0].approvals.data.map(el => el.status)

или массив всех status es:

content.map(el => el.approvals.data.map(it => it.status)).flat(1)

, но последний пример будет работать только в довольно новые браузеры.

...