Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to update a property of a JSON object using NewtonSoft

Tags:

json

c#

json.net

I have a JSON string like this:

{     "code": "GENDER",     "value": { "option": "ML" } } 

I would like to update the option property to "Male" if the value is "ML" and "Female" if the value is "FM".

I have got to this point, but am unsure how to proceed:

JArray contentobject = (JArray)JsonConvert.DeserializeObject(contentJSON);   JObject voicgObj = contentobject.Children().FirstOrDefault(ce =>   ce["code"].ToString() == "GENDER") as JObject; JProperty voicgProp = voicgObj.Property("value"); 

I don't know how to get to the option which is a child of value.

Thanks in advance. Any pointers would be great.

like image 738
Pipe2Path Avatar asked Apr 04 '14 03:04

Pipe2Path


People also ask

How do I change the value of a JSON file?

First you would need to convert it to a JavaScript Object. Once it is an Object, then you can just use dot notation into the object to change the values that you want. Lastly, you would convert that JavaScript Object back into a JSON string.

How do I change text in a JSON file?

The best way is to parse it, replace the text in the object, and then stringify it. The next best way is to use a regular expression. In this example, I catch exceptions if path cannot be indexed, and use ['type'] instead of . type so it will scale to indexing 'non-type' if you wish.

What is JSON object property?

A JSON object contains zero, one, or more key-value pairs, also called properties. The object is surrounded by curly braces {} . Every key-value pair is separated by a comma. The order of the key-value pair is irrelevant.

How do I use Newtonsoft JSON?

Use the Newtonsoft. Json; To build and run the app, press F5 or select Debug > Start Debugging. Select the Click Me button to see the contents of the TextBlock object replaced with JSON text.


2 Answers

You can access the object by using properties as keys:

JObject obj = JObject.Parse(json); string gender = (string)obj["value"]["option"]; 

For your example, try:

JObject obj = JObject.Parse(json); var val = obj["value"]; string option = (string)val["option"];  if (option == "ML")    val["option"] = "Male";  if (option == "FM")    val["option"] = "Female";  string result = obj.ToString(); 
like image 155
ltiong_sh Avatar answered Oct 09 '22 20:10

ltiong_sh


Another way, with minimal property retrieving:

var val = voicgObj["value"] as JObject; JProperty optionProp = val.Property("option"); string option = optionProp.Value.Value<string>();  if (option == "ML")     optionProp.Value = "Male"; else if (option == "FM")     optionProp.Value = "Female"; 
like image 29
Кое Кто Avatar answered Oct 09 '22 19:10

Кое Кто