我想要删除__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":""
}
]
}
}
答案 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 对象。
答案 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);
该函数可以使用第三个参数来指定它是否应该检查嵌套对象。