Цикл по JSON - требуется логика для подсчета суммы значений - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь получить сумму значений ключа number из приведенного ниже JSON.

sum = 193 (21 + 52 + 52 + 68)

Здесь я буду использовать циклы вместо прямого доступа - response ['jobs'] ['0'] ['lastBuild']['число'].Может кто-нибудь, пожалуйста, предоставьте логику?подойдет любой язык программирования.

{
"_class": "hudson.model.Hudson",
"jobs": [
    {
        "_class": "org.jenkinsci.plugins.workflow.job.WorkflowJob",
        "name": "ADP-CHINA-IT",
        "lastBuild": {
            "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
            "number": 21
        }
    },
    {
            "_class": "com.cloudbees.hudson.plugins.folder.Folder",
            "name": "A",
            "jobs": [
                {
                    "_class": "hudson.model.FreeStyleProject",
                    "name": "dummy",
                    "lastBuild": {
                        "_class": "hudson.model.FreeStyleBuild",
                        "number": 52
                    }
                },
                {
                    "_class": "com.cloudbees.hudson.plugins.folder.Folder",
                    "name": "F",
                    "jobs": [
                        {
                            "_class": "org.jenkinsci.plugins.workflow.job.WorkflowJob",
                            "name": "pipeline",
                            "lastBuild": {
                                "_class": "hudson.model.FreeStyleBuild",
                                "number": 52
                            }
                        }
                    ]
                }
            ]
        },
        {
            "_class": "org.jenkinsci.plugins.workflow.job.WorkflowJob",
            "name": "CICD_Windows_Shared_Lib_Test",
            "lastBuild": {
                "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
                "number": 68
            }
        }


]

}

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

питон:

def sum_(s, dict_):
    return s + reduce(sum_, dict_.get("jobs", []), 0) + dict_.get("lastBuild", {}).get("number", 0)


reduce(sum_, response["jobs"], 0)
1 голос
/ 04 апреля 2019

Использовать Array.prototype.reduce рекурсивно:

type Job = {lastBuild: {number: number}, jobs?: Job[]}

const reduction = (acc: number, job:Job) => acc + job.lastBuild.number 
      + (job.jobs ? job.jobs.reduce(reduction,0) : 0); // recursion

response.jobs.reduce(reduction, 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...