遍历JSON - 需要逻辑来计算值的总和

2024-06-08 07:02:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从下面的JSON中获取键number的值之和

总和=193(21+52+52+68)

我将在这里使用循环,而不是直接访问响应['jobs']['0']['lastBuild']['number']。 有人能提供逻辑吗?任何编程语言都可以

{
"_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
            }
        }


]

}


Tags: nameorgcomnumbermodeljobspluginsjob
2条回答

Python:

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


reduce(sum_, response["jobs"], 0)

递归使用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);

相关问题 更多 >

    热门问题