Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
如何向javascript中的每个JSON对象添加JSON数组?_Javascript_Arrays_Angularjs_Json - Fatal编程技术网

如何向javascript中的每个JSON对象添加JSON数组?

如何向javascript中的每个JSON对象添加JSON数组?,javascript,arrays,angularjs,json,Javascript,Arrays,Angularjs,Json,我有以下JSON对象: { "status": "CREATED", "overrides": { "name": "test_override" }, "package_name": "test", "name": "app1", "defaults": { "job": { "example": { "executors_num": "2", "freq_in_mins": "180", "e

我有以下
JSON
对象:

{
  "status": "CREATED",
  "overrides": {
    "name": "test_override"
  },
  "package_name": "test",
  "name": "app1",
  "defaults": {
    "job": {
      "example": {
        "executors_num": "2",
        "freq_in_mins": "180",
        "executors_mem": "256M",
        "job_name": "batch_example"
      }
    }
  }
}
我想将上面的
JSON
对象转换成这样的东西。基本上为每个嵌套对象添加一个数组

{
  "children": [
    {
      "status": "CREATED"
    },
    {
      "obj": "overrides",
      "children": [
        {
          "name": "test_override"
        }
        ]
        },
        {
          "package_name": "test"
        },
        {
          "name": "app1"
        },
        {
          "obj": "defaults",
          "children": [
          {
           "obj": "job",
           "children": [
           {
            "obj": "example",
            "children": [
            {
              "executors_num": "2",
              "freq_in_mins": "180",
              "executors_mem": "256M",
              "job_name": "batch_example"
            }]
          }]
        }]
      }
    ]
}
以下是我对代码的理解:

function traverse(o, d) {
  for (i in o) {
    if (typeof(o[i])=="object") {
      console.log(i, o[i]);
      // considering only 'default' obj for now
      if(i === 'defaults') {
        d.children.push( {obj: i, "children" :[ o[i] ]});
      }
      traverse(o[i], d);
    }
  }
  return d;
}   
我的结论是:

{"children":[{"obj":"defaults",
"children":[{"job":{"example":
{"executors_num":"2","freq_in_mins":"180","executors_mem":"256M","job_name":"batch_example"}}}]}]}

但我似乎被打动了,不知道如何将
子对象
数组添加到每个嵌套对象中。有指针吗?

下面的代码是一个递归函数,用于检查对象键是否是对象,如果是,则调用它自己
var数据={
“状态”:“已创建”,
“覆盖”:{
“名称”:“测试覆盖”
},
“包名称”:“测试”,
“名称”:“app1”,
“默认值”:{
“工作”:{
“示例”:{
“执行人人数”:“2”,
“频率在分钟内”:“180”,
“遗嘱执行人”:“256M”,
“作业名称”:“批处理示例”
}
}
}
}
功能到阵列(obj){
var res={children:[]}
Object.keys(obj).forEach(函数(key){
var childObj={};
如果(对象的类型[键]=“对象”){
childObj[key]=toArray(obj[key])
}
否则{
childObj[key]=obj[key]
}
res.children.push(childObj)
})
返回res;
}

document.write(JSON.stringify(toArray(data))
另一个建议,为每个属性在子数组中添加一个自己的对象

功能组织(对象、结果、键){
如果(对象的类型=='object'){
result.obj=键;
结果:儿童=[];
Object.keys(对象).forEach(函数(k){
var o={};
结果:儿童推(o);
组织(对象[k],o,k);
});
}否则{
结果[键]=对象;
}
}
var object={“status”:“CREATED”,“overrides”:{“name”:“test_override”},“package_name”:“test”,“name”:“app1”,“defaults”:{“job”:{“executors_num”:“2”,“freq_in_mins”:“180”,“executors_mem”:“256M”,“job_name”:“batch_example”},
newObject={};
组织(对象、新对象)

document.write(''+JSON.stringify(newObject,0,4)+'')确切的问题是什么?有错误消息吗?我不知道如何将数组添加到每个嵌套对象。。我以以下内容结束:
{“children”:[{“obj”:“defaults”},{“children”:[{“job”:{“executors_num”:“2”,“freq_in_mins”:“180”,“executors_mem”:“256M”,“job_name”:“batch_example”}}
请用您评论中的代码更新您的示例。@whipdancer用代码更新了示例。.您可以添加任何Fiddle/Pnlkr吗?这不是我想要的答案。。它将单个元素添加为JSON对象。。相反,它应该成为父数组的子数组。