簡體   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