如何有选择地从现有的JSON字符串中删除某些属性?
问题描述:
我有一个嵌套的JSON字符串.我想减少JSON的大小,仅选择一些属性,而忽略其余属性.我该怎么办?
I have a nested JSON string. I want to reduce the size of the JSON, selecting only some of the properties and omitting the rest. How can I do it?
示例JSON字符串:
[
{
"ID": 17,
"Code": "1",
"SupplierID": 24,
"Date": "2018-07-04T10:16:37.107",
"OrderDetails": [
{
"ID": 17,
"OrderID": 17,
"ItemID": 5806,
"Quantity": 20000.0,
"ConfirmQuantity": 20000.0,
"ConfirmDate": "2018-09-11T11:33:30.463",
"Deadline": "2018-07-22T00:00:00",
"IsCanceled": false,
"PersonnelID": 667,
"IsConfirmed": false
},
{
"ID": 190,
"OrderID": 170,
"ItemID": 5806,
"Quantity": 20000.0,
"ConfirmQuantity": 20000.0,
"ConfirmDate": "2018-09-11T11:33:30.463",
"Deadline": "2018-07-22T00:00:00",
"IsCanceled": false,
"PersonnelID": 6670,
"IsConfirmed": false
}
]
},
{
"ID": 19,
"Code": "2",
"SupplierID": 20,
"Date": "2018-07-14T13:25:50.030",
"OrderDetails": [
{
"ID": 18,
"OrderID": 19,
"ItemID": 15425,
"Quantity": 2100.0,
"ConfirmQuantity": 2100.0,
"Deadline": "2018-07-18T00:00:00",
"IsCanceled": false,
"PersonnelID": 445,
"IsConfirmed": false
}
]
}
]
所需结果:
[
{
"ID": 17,
"Code": "1",
"OrderDetails": [
{
"ID": 17,
"ItemID": 5806,
"Quantity": 20000.0,
},
{
"ID": 190,
"ItemID": 5806,
"Quantity": 20000.0,
}
]
},
{
"ID": 19,
"Code": "2",
"OrderDetails": [
{
"ID": 18,
"ItemID": 15425,
"Quantity": 2100.0,
}
]
}
]
答
您可以使用Json.Net的 LINQ-to-JSON API可以执行以下操作:
You could use Json.Net's LINQ-to-JSON API to do something like this:
var namesToKeep = new string[] { "ID", "Code", "OrderDetails", "ItemID", "Quantity" };
var jArray = JArray.Parse(jsonString);
foreach (var prop in jArray.Descendants().OfType<JProperty>().ToList())
{
if (!namesToKeep.Contains(prop.Name))
prop.Remove();
}
jsonString = jArray.ToString();