using System.Collections.Generic;
using Newtonsoft.Json.Linq;
public static void Main()
""tipo_identificacion_id"": 1,
""NumeroEmpleado_id"": 94060312,
""SalarioMensual"": 700000,
""UsuarioLogin"": ""superuser""
string json2 = @"{""consulta_id"":null,""respuesta_id"":null,""tipo_identificacion_persona_juridica_id"":""NI"",
""numero_identificacion_persona_juridica"":""800021308"",""razon_social"":""DRUMMOND LTD"",""ciiu"":""2399"",
""nombre_actividad"":"" Fabricación de otros productos minerales no metálicos n.c.p."",
""clase_aportante"":""Aportante con 200 o más cotizantes"",""tipo_aportante"":""Empleador"",""nivel_riesgo"":""Medio"",
""dias_desde_vencimiento"":""<=30"",""mediana"":""4156978838"",""promedio"":""4305516948"",""maximo"":""5135895588"",
""minimo"":""2756162423"",""tendencia"":""Creciente"",""desvest"":""626768379"",""variacion"":""0.863422686972755"",
""pagos_nomina"":[{""periodo"":""202006"",""empleados"":""358"",""nomina"":""5135895588""},{""periodo"":""202005"",""empleados"":""319"",""nomina"":""2756162423""},{""periodo"":""202004"",""empleados"":""440"",""nomina"":""4036467479""},{""periodo"":""202003"",""empleados"":""461"",""nomina"":""4047530130""},{""periodo"":""202002"",""empleados"":""458"",""nomina"":""4116841390""},{""periodo"":""202001"",""empleados"":""464"",""nomina"":""4125970457""},{""periodo"":""201912"",""empleados"":""473"",""nomina"":""4765820670""},{""periodo"":""201911"",""empleados"":""464"",""nomina"":""4156978838""},{""periodo"":""201910"",""empleados"":""460"",""nomina"":""3901219271""},{""periodo"":""201909"",""empleados"":""501"",""nomina"":""4725006722""},{""periodo"":""201908"",""empleados"":""496"",""nomina"":""5036742537""},{""periodo"":""201907"",""empleados"":""485"",""nomina"":""4861567873""}]}";
""tipo_identificacion_id"": 1,
""NumeroEmpleado_id"": ""46458092"",
""SalarioMensual"": 1800000,
JToken token = JToken.Parse(json3);
string[] jsonPaths = ExampleConfigSettings.GetJsonPathsToObscure();
JsonHelper.ObscureMatchingValues(token, jsonPaths);
ExampleLogger.Log(token.ToString(Formatting.None));
public static class JsonHelper
public static void ObscureMatchingValues(JToken token, IEnumerable<string> jsonPaths)
foreach (string path in jsonPaths)
foreach (JToken match in token.SelectTokens(path))
match.Replace(new JValue(Obscure(match.ToString())));
public static string Obscure(string s)
if (string.IsNullOrEmpty(s))
int leftLen = len > 4 ? 1 : 0;
int rightLen = len > 6 ? Math.Min((len - 6) / 2, 4) : 0;
return s.Substring(0, leftLen) + new string ('*', len - leftLen - rightLen) + s.Substring(len - rightLen);
public static class ExampleConfigSettings
public static string[] GetJsonPathsToObscure()
return new string[]{"$..NumeroEmpleado_id", "$..SalarioMensual", "$..Salario", "$..UsuarioLogin", "$..cliente", "$..numero_identificacion_persona_juridica", "$..nomina"};
public static class ExampleLogger
public static void Log(string s)
Console.WriteLine(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff") + " - " + s);