Jquery:将嵌套的json对象转换为另一个json对象

时间:2013-02-22 12:00:46

标签: javascript jquery json

在javascript / jquery中我如何实现以下

old_dataset = [
{
    "dob": "xyz",
    "name": {
        "first": " abc",
        "last": "lastname"
    },
    "start_date": {
        "moth": "2",
        "day": "5",
        "year": 1
    },
    "children": [
        {
            "child": {
                "id": "1",
                "desc": "first child"
            }
        },
        {
            "child": {
                "id": "2",
                "desc": "second child"
            }
        }
    ]
},
{
    "dob": "er",
    "name": {
        "first": " abc",
        "last": "txt"
    },
    "start_date": {
        "moth": "2",
        "day": "5",
        "year": 1
    },
    "children": [
        {
            "child": {
                "id": "1",
                "desc": "first child"
            }
        },
        {
            "child": {
                "id": "2",
                "desc": "second child"
            }
        }
    ]
}

使用jquery迭代以上内容并更改为以下

new_dataset = [
{
    "dob":"xyz",
    "name": <first and last name values>
    "start_date":<value of month day year>,
    "children": [ {
       child_id :1,
       child_id : 2
      }, 
    ]
 },{
    "dob":"er",
    "name": <first and last name values>
    "start_date":<value of month day year>,
    "children": [ {
       child_id :1,
       child_id : 2
      }, 
    ]
}]

如果有人可以提供代码来转换数据,那将有助于我理解迭代

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

function transformDataset(oldDataset) {
  var newDataset = [];
  var newObj;

  for (var i = 0; i < oldDataset.length; i++) {
    newObj = transformObj(oldDataset[i]);
    newDataset.push(newObj);
  }

  return newDataset;
}

function transformObj(obj) {
  var children = obj.children;

  obj.name = obj.name.first + ' ' + obj.name.last;
  obj.start_date = obj.start_date.month + ' ' + obj.start_date.day + ' ' + obj.start_date.year;

  obj.children = [];
  for (var i = 0; i < children.length; i++) {
    obj.children.push(children[i].child.id);
  }

  return obj;
}

var new_dataset = transformDataset(old_dataset);

请注意,new_dataset将包含子ID 的数组,而不是具有多个child_id属性的对象。 您还在old_dataset.start_date.month中写了一个拼写错误(写成moth)(或者可能是有意的)。

答案 1 :(得分:0)

先用map遍历数组数据(old_dataset),用新值替换元素名和start_date然后返回数组

const old_dataset = [
{
    "dob": "xyz",
    "name": {
        "first": " abc",
        "last": "lastname"
    },
    "start_date": {
        "moth": "2",
        "day": "5",
        "year": 1
    },
    "children": [
        {
            "child": {
                "id": "1",
                "desc": "first child"
            }
        },
        {
            "child": {
                "id": "2",
                "desc": "second child"
            }
        }
    ]
},
{
    "dob": "er",
    "name": {
        "first": " abc",
        "last": "txt"
    },
    "start_date": {
        "moth": "2",
        "day": "5",
        "year": 1
    },
    "children": [
        {
            "child": {
                "id": "1",
                "desc": "first child"
            }
        },
        {
            "child": {
                "id": "2",
                "desc": "second child"
            }
        }
    ]
}
]

let new_dataset = old_dataset.map((arr) => {
  arr.name = `${arr.name.first} ${arr.name.last}`
  arr.start_date = `${arr.start_date.moth} ${arr.start_date.day} ${arr.start_date.year}`
  return arr
})

console.log(new_dataset)