创建自定义JSON对象

时间:2014-10-17 08:16:58

标签: javascript json node.js

我有以下JSON对象。

"Department": [
      {
        "depType": "Testing",
        "name": "xyz",
        "address":""
      },
      {
        "deptype": "Developer",
        "name": "abc"
      }
    ]

我想根据deptartment(depType)的类型创建另一个对象。像这样的东西

"Testing":{
        "name": "xyz",
        "address":""
        },
"Developer":{
        "name": "abc"
        }

在Object.keys的帮助下,我能够获得密钥

1 个答案:

答案 0 :(得分:1)

  • 您对camelCased "depType"有一些属性命名问题。解决了这个问题。
  • 使用JSON.parse(JSON.stringify(orgObj))
  • 创建要操作的所需对象的新副本
  • 循环该对象以查找所需的属性"Department"
  • 由于Department是一个对象数组,因此需要循环该数组for(var i=0; i<dep.length; i++)
  • 如果该数组包含arrObj.hasOwnProperty( "depType" )
  • ,则需要匹配
  • 如果成功,您可以使用所有信息newObj[arrObj.depType] = arrObj;
  • 填充新对象
  • 从现在开始,在您的新对象中,您还可以使用"depType"摆脱它的旧delete属性。

<强> jsBin demo

var myjson = {
  "Department": [
      {
        "depType": "Testing",   // NOTE: "camelCase"
        "name": "xyz",
        "address":""
      },
      {
        "depType": "Developer", // FIX: "camelCase" !!
        "name": "abc"
      }
    ]
};

function depTypify( orgObj ) {
  var objCopy = JSON.parse(JSON.stringify(orgObj)); // Fresh copy
  var newObj = {};
  for(var prop in objCopy){
    if(prop === "Department") {
      var dep = objCopy[prop];          // get Department Array
      for(var i=0; i<dep.length; i++) { // Loop array
        var arrObj = dep[i];            // Explore Each Array Object
        if(arrObj.hasOwnProperty( "depType" )) {
          newObj[arrObj.depType] = arrObj;
          delete arrObj.depType;        // We don't need it any more
        }
      }
    }
  }
  return newObj;
}

var myNewJson = depTypify( myjson );

如果你这样做,console.log( myNewJson )这就是你得到的:

[object Object] {
  Developer: [object Object] {
    name: "abc"
  },
  Testing: [object Object] {
    address: "",
    name: "xyz"
  }
}

好消息是你的旧json仍然完好无损。