Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove Properties From a Json String using newtonsoft

Tags:

c#

json.net

I have the following JSON string:

{      "results":[         {            "id":11,          "name":"Employee A",          "isEmployee":true       },       {          "id":12,          "name":"Employee B",          "isEmployee":true       },       {          "id":13,          "name":"Employee C",          "isEmployee":true       },       {          "id":14,          "name":"Contractor A",          "isEmployee":false       },       {          "id":15,          "name":"Contractor B",          "isEmployee":false       }    ],    "totalItems":5 } 

I need to remove from it the id and isEmployee properties and leave only the name property.

Here is the desired result:

{      "results":[         {            "name":"Employee A"       },       {            "name":"Employee B"       },       {            "name":"Employee C"       },       {            "name":"Contractor A"       },       {            "name":"Contractor B"       }    ],    "totalItems":5 } 

How can this be done in C# using Newtonsoft JSON.NET?

like image 741
Vonetizer Avatar asked Aug 22 '15 06:08

Vonetizer


2 Answers

there is a Remove method present (not sure if it was at the time of this question)

For example:

var raw = "your json text"; var o = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(raw); o.Property("totalItems").Remove() return o.ToString(); 

or for your exact input

var parent = JsonConvert.DeserializeObject<JObject>(raw); ((JArray)parent.Property("results").Value)     .Select(jo => (JObject)jo)     .ToList()     .ForEach(x =>          x             .Properties()             .ToList()             .ForEach(p =>             {                 if (p.Name != "name")                     p.Remove();             }))     //.Dump();     ; 
like image 50
Maslow Avatar answered Sep 30 '22 16:09

Maslow


There are two basic approaches,

Either

  • Parse it to a JObject (eg JObject.Parse(json)); modify the object graph by updating the nested JObjects while traversing; serialize the original JObject which now represents the modified object graph.

Or

  • Deserialize the JSON to strongly-typed objects without the additional properties. The properties not present in the C# types will be silently dropped. Then serialized the just-deserialized object.
like image 31
user2864740 Avatar answered Sep 30 '22 16:09

user2864740