如何有选择地从现有的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();

提琴: https://dotnetfiddle.net/Pj9Wsu