繁体   English   中英

JavaScript:从JSON对象提取属性

[英]JavaScript : Extract properties from JSON object

问题陈述:我有一个JSON对象,其中包含n个属性。 我需要将这个JSON对象的一些属性作为JSON字符串传递给服务器。

尝试过:我使用Object.defineProperty()方法使该enumerable作为我不想在JSON string传递的对象属性的false 请在下面的代码段中查找以获得更清晰的图片。

 var jsonObj = { "name": "Rohit", "age": 27, "city": "Gurgaon" }; Object.defineProperty(jsonObj, 'name', { enumerable: false }); console.log(JSON.stringify(jsonObj)); 

上面的代码面临的问题:

假设我有一个100号码中的对象的属性和我想通过仅20属性服务器退出100 然后,我必须在下面的代码行中编写80次,以删除不需要的属性,这将影响应用程序的性能。

Object.defineProperty(jsonObj, 'name', { enumerable: false });

我还研究了关于SO的已问问题,但未找到此问题陈述的任何合适答案。

有没有更好的方法来实现这一目标?

始终可以选择创建一个新对象,只拔出所需的键。 为此,请参见单线从对象中获取一些属性


JSON.stringify接受“ JSON.stringify ”功能作为第二个参数。 这样,您就可以在序列化过程中更改值,包括过滤掉它们。 假设要保留的属性较少,则应在数组或Set列出这些属性。

 var jsonObj = { "name": "Rohit", "age": 27, "city": "Gurgaon" }; var toKeep = ['age', 'city']; console.log(JSON.stringify( jsonObj, (key, value) => !key || toKeep.indexOf(key) > -1 ? value : undefined, )); 

 var jsonObj = { "name": "Rohit", "age": 27, "city": "Gurgaon" }; var newObj = jsonObj; var arr = ["name","age"]; for(var i=0;i<arr.length;i++){ delete newObj[arr[i]] } console.log(newObj); 

我觉得这可以解决您的问题。

请尝试以下操作,它不会修改您的原始对象:

 var jsonObj = { "name": "Rohit", "age": 27, "city": "Gurgaon" }; var storePropeties = ["city"]; var result = Object.keys(jsonObj).reduce(function (obj, key) { if(storePropeties.includes(key)) obj[key] = jsonObj[key]; return obj }, {}) console.log(result); 

您应该创建一个要发送到服务器的新对象

我的解决方案:

var jsonObj = {
  "name": "Rohit",
  "age": 27,
  "city": "Gurgaon"
};

// if you don't need specific keys you should delete this and ~keys.indexOf(prop) in condition
var keys = ['name', 'city', 'moscow'];

function newObj(obj, count) {
  var newObj = {};
  var counter = count;

  for (var prop in obj) {
    if (jsonObj.hasOwnProperty(prop) && ~keys.indexOf(prop)) {
      newObj[prop] = obj[prop];
      counter -= 1;
    }

    if(counter === 0) break;
  }

  return newObj;
}

console.log(JSON.stringify(newObj(jsonObj, 20)));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM