如何删除特定的嵌套json属性

时间:2014-05-10 12:06:58

标签: javascript json

我想要删除__metadata。如何做到这一点我搜索了这个问题,但没有得到确切的解决方案。希望你能帮助我。

{
  "__metadata":{
     "uri":"asd",
     "type":"DP_CART_SRV.DPCARTHeader"
  },
  "Dealer":{
     "__metadata":{
        "uri":"asd"
     },
     "CustomerNo":"",
     "Name1":"",
     "Name2":""
  },
  "Retailer":{
     "__metadata":{
        "uri":"asd"
     },
     "CustomerNo":"",
     "Name1":"",
     "Name2":""
  },
  "Cart":"0000000081",
  "Type":"SH",
  "CreatedOn":"/Date(1399420800000)/",
  "ChangedOn":null,
  "OrderId":"",
  "OrderType":"",
  "ReqDeliveryDate":"2014/05/31",
  "OrderValue":"11.00",
  "DocCurrency":"EUR",
  "NetValue":"11.00",
  "Freight":"0.00",
  "Discount":"0.00",
  "Tax":"0.00",
  "Remarks":"Remarks",
  "Items":{
     "results":[
        {
           "__metadata":{
              "uri":"asd"
           },
           "Cart":"0000000081",
           "ItemNo":"000010",
           "ProductID":"FAN_FG1",
           "ItemDesc":"Finshed product FAN",
           "Quantity":"1.000",
           "Uom":"KAR",
           "Price":"11.00",
           "Currency":"EUR",
           "Available":"",
           "DeleteStatus":""
        },
        {
           "__metadata":{
              "uri":"",
              "type":""
           },
           "DeleteStatus":"",
           "Available":"",
           "Currency":"",
           "Price":"",
           "Uom":"",
           "Quantity":"",
           "ItemDesc":"",
           "ProductID":"",
           "ItemNo":"",
           "Cart":""
        }
     ]
  }
}

2 个答案:

答案 0 :(得分:1)

这是一个有趣的。如何做到这一点并不是很明显:

var result = JSON.parse(JSON.stringify(obj, function(key, value) {
    return key !== '__metadata' ? value : undefined;
}));

它使用replacer函数JSON.stringify方法接受:

  

代用品   如果是函数,则转换字符串化时遇到的值和属性;如果是数组,则指定最终字符串中对象中包含的属性集。   有关替换器函数的详细说明,请参阅javaScript指南文章Using native JSON。

但请注意,这不是JSON.stringify和JSON.parse用法。当然result也不再是原始对象,而是 new 对象。

演示:http://jsfiddle.net/7Gj47/

答案 1 :(得分:1)

我真的不知道“嵌套json属性”是什么意思。 OP似乎是一个对象文字,它是用于JSON的语法,但JSON是一个字符串。

无论如何,假设您拥有JSON,可以使用JSON.parse将其转换为对象。然后,您可以遍历该对象并删除具有特定名称的任何属性,并使用以下函数以递归方式从“嵌套”对象中删除属性:

function removeProp(obj, propName) {

  for (var p in obj) {

    if (obj.hasOwnProperty(p)) {

      if (p == propName) {
        delete obj[p];

      } else if (typeof obj[p] == 'object') {
        removeProp(obj[p], propName);
      }
    }
  }
  return obj;
}

因此,如果您有JSON(即表示对象的文本),则可以使用以下内容删除特定属性的所有实例:

var jsonText = '{ ... }';

var obj = JSON.parse(jsonText);
removeProp(obj, '__metadata');
jsonText = JSON.stringify(obj);

该函数可以使用第三个参数来指定它是否应该检查嵌套对象。