2
votes

Supprimer un membre de JArray

J'ai le JSON ci-dessous

[
    {
        "Code": "Global Payroll",
        "Month1": 1,
        "Month2": 0,
        "Month3": 0,
        "Month4": null,
        "Month5": null,
        "Month6": null,
        "Month7": null,
        "Month8": null,
        "Month9": null,
        "Month10": null,
        "Month11": null,
        "Month12": null,
        "YTD": 1,
        "PercentOfTotal": "16.67%"
    },
    {
        "Code": "GV Payroll",
        "Month1": 0,
        "Month2": 0,
        "Month3": 3,
        "Month4": null,
        "Month5": null,
        "Month6": null,
        "Month7": null,
        "Month8": null,
        "Month9": null,
        "Month10": null,
        "Month11": null,
        "Month12": null,
        "YTD": 3,
        "PercentOfTotal": "50.00%"
    }  
]

Ce que je voulais faire, c'était en quelque sorte supprimer Month4, Month5 etc. du JSON, puis le reconvertir en chaîne.

J'ai essayé de regarder dans la méthode JArray.remove mais cela supprime l'élément lui-même du tableau. Quelqu'un peut-il me dire comment je peux supprimer complètement des propriétés de JArray.


1 commentaires

Vous n'utiliserez pas JArray , mais plutôt JObject , ciblant un élément dans le JArray . Voir stackoverflow.com/q/32153010/215552 . Pour cibler un élément dans le JArray , consultez stackoverflow.com/q/26372250/215552


3 Réponses :


1
votes

JArray est pour [] (array)

JObject est pour {}(object)

Mois1 .. Mois12 ce sont tous des objets. Dans ce cas, vous devez utiliser JObject

JArray ja = JArray.Parse(json);
JObject jo = (JObject)ja[0];
jo.Property("Month4").Remove();
json = jo.ToString();

Violon


1 commentaires

Merci Simonare



2
votes
var array = JArray.Parse(json);

foreach (JObject elem in array)
{
   foreach (var elementToRemove in new List<string>() {"Month4", "Month5" })
   {
       elem.Property(elementToRemove).Remove();
    }              
}

var resultJson = array.ToString();

1 commentaires

Génial :) .. Merci beaucoup



1
votes

Vous pouvez appeler Remove () depuis JProperty pour les supprimer. De plus, au lieu de supprimer des propriétés spécifiques par nom, vous souhaiterez peut-être simplement supprimer les propriétés nommées "MonthX" dont la valeur est nulle.

var json = /* your json here */;
var payrolls = JArray.Parse(json);

foreach(var payroll in payrolls)
{
    foreach (var property in payroll.Children<JProperty>().ToArray())
    {
        if (property.Name.StartsWith("Month") && property.Value.Type == JTokenType.Null)
            property.Remove();
    }
}

json = payrolls.ToString();


1 commentaires

J'apprécie vraiment votre aide :)