[英]How to extract specific properties from each JSON object using javascript
[英]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.