JsonExtensions: Replace Value

CSharp · Console

/Program.cs

using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.Linq;
					
public class Program
{
	public static void Main()
	{
		var jsonString = "{\"foo\": [{ \"abc\": \"bar\",\"xyua\": 7},{\"lkkj\": true},{\"babnd\": \"jhjkas\",\"ihdo\": 109,\"daers\": true}],\"ewq\": 7,\"inh\": null,\"bhj\": true,\"test\": null,\"booltest\": false}";
		var jsonObj = JObject.Parse(jsonString);
		var resultJsonObj = JsonExtensions.ReplacePath(jsonObj, "$.foo[0].abc", "*********");
		resultJsonObj = JsonExtensions.ReplacePath(resultJsonObj, "$.foo[2].babnd", true);		
		resultJsonObj = JsonExtensions.ReplacePath(resultJsonObj, "$.ewq", 8008);
		var outputResult = resultJsonObj.ToString(Formatting.None);
		Console.WriteLine(outputResult);
	}
}

    static class JsonExtensions
    {
        public static JObject ReplacePath<T>(this JToken root, string path, T newValue)
        {
            if (root == null || path == null)
            {
                throw new ArgumentNullException();
            }

            foreach (var value in root.SelectTokens(path).ToList())
            {
                if (value == root)
                {
                    root = JToken.FromObject(newValue);
                }
                else
                {
                    value.Replace(JToken.FromObject(newValue));
                }
            }

            return (JObject)root;
        }

        public static string ReplacePath<T>(string jsonString, string path, T newValue)
        {
            return JToken.Parse(jsonString).ReplacePath(path, newValue).ToString();
        }
    }
;