JavaScript:从JSON对象中提取属性

时间:2018-06-10 06:52:20

标签: javascript json object

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

尝试:我使用Object.defineProperty()方法将enumerable作为false的对象属性,我不想在JSON string中传递1}}。请在下面的代码段中找到更清晰的图片。

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的问题,但没有找到任何合适的答案来解决这个问题。

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

4 个答案:

答案 0 :(得分:1)

始终可以选择创建新对象并仅提取所需的键。请参阅One-liner to take some properties from object in ES 6

JSON.stringify接受“replacer”函数作为第二个参数。这允许您在序列化期间更改值,包括将其过滤掉。假设您要保留的属性较少,则应列出数组或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,
));

答案 1 :(得分:0)

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);

这可以解决我的问题。

答案 2 :(得分:0)

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

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);

答案 3 :(得分:0)

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

我的解决方案:

SELECT * FROM edu_tb
INNER JOIN master_tb ON
master_tb.`master_id` = edu_tb.`master_id`

INNER JOIN exp_tb ON
master_tb.`master_id` = exp_tb.`master_id`

INNER JOIN certi_tb ON
master_tb.`master_id` = certi_tb.`master_id`