如何在javascript中为每个JSON对象添加一个JSON数组
How to add a JSON array to every JSON object in javascript?
我有以下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"}}}]}]}
但我似乎很震惊,不知道如何将children
数组添加到每个嵌套对象中。有指针吗?
下面的代码是一个递归函数,用于检查对象键是否是对象,如果是,则调用它self
var data = {
"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"
}
}
}
}
function toArray(obj){
var res = {children:[]}
Object.keys(obj).forEach(function(key){
var childObj = {};
if(typeof obj[key] === 'object'){
childObj[key] = toArray(obj[key])
}
else{
childObj[key] = obj[key]
}
res.children.push(childObj)
})
return res;
}
document.write(JSON.stringify(toArray(data)))
另一个建议,它为子数组中的每个属性添加一个自己的对象。
function organize(object, result, key) {
if (typeof object === 'object') {
result.obj = key;
result.children = [];
Object.keys(object).forEach(function (k) {
var o = {};
result.children.push(o);
organize(object[k], o, k);
});
} else {
result[key] = object;
}
}
var object = { "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" } } } },
newObject = {};
organize(object, newObject)
document.write('<pre>' + JSON.stringify(newObject, 0, 4) + '</pre>');
相关文章:
- Gmaps4rails:如何向 json 添加属性
- 向JSON添加值
- 从node.js模块中向JSON添加原型函数
- Ajax JSON 添加尾随冒号
- 无法将解析的 JSON 添加到主干集合
- 将 /.json 添加到快速路由末尾的最佳方法是什么
- 从 JSON 添加图像和文本以 html 形式列出
- 将异步 REST 调用 JSON 添加到 Angular $scope
- 向声音云响应json添加一个变量
- 如何使用 $interpolate 函数从 JSON 添加动态指令名称
- 如何使用jQuery Ajax将数据从JSON添加到HTML
- 在AngularJS中将json添加到作用域
- 使用Javascript为JSON添加嵌套键
- 存储在变量中的JSON添加了键
- Angular——给json添加值
- JSON:添加指针
- 在Javascript中从外部json添加多个标记到谷歌地图
- Knockout.js-试图将JSON添加到视图模型中是未定义的
- Jquery json添加新行
- 在不使用eval的情况下向JSON添加函数