Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在JSON上循环-需要逻辑来计算值的总和_Python_Json_Algorithm_Typescript_Logic - Fatal编程技术网

Python 在JSON上循环-需要逻辑来计算值的总和

Python 在JSON上循环-需要逻辑来计算值的总和,python,json,algorithm,typescript,logic,Python,Json,Algorithm,Typescript,Logic,我试图从下面的JSON中获取keynumber的值之和 总和=193(21+52+52+68) 我将在这里使用循环,而不是直接访问响应['jobs']['0']['lastBuild']['number']。 谁能提供逻辑?任何编程语言都可以 { "_class": "hudson.model.Hudson", "jobs": [ { "_class": "org.jenkinsci.plugins.workflow.job.WorkflowJob", "

我试图从下面的JSON中获取key
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
            }
        }


]

}

使用
数组。原型。递归减少

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);

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

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


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

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


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

函数
reduce
from
functools
我们可以在typescript中使用相同的逻辑吗?函数
reduce
from
functools
我们可以在typescript中使用相同的逻辑吗?这看起来像是与文件夹层次结构相对应的结构化输出。这是否意味着
number
键可以嵌套在任何级别?@DroidX86是的,number键可以嵌套在任何级别。这看起来像是与文件夹层次结构相对应的结构化输出。这是否意味着
number
键可以嵌套在任何级别?@DroidX86是的,number键可以嵌套在任何级别。