How to replace string using another string containing Json?

2

Is there any way to do a replace of a String with the fields of another string that contains a Json?

Example;

I have the string;

String template = "Olá [Nome], Tenha um bom dia ... hoje é [Data] e é seu aniversario";

And in the other string would have;

String mensagem = "{"Nome": "Marconcilio","Data": "21/01/18"}"

Since in my string template and [Date] , they are variables, that is, at any given moment it may contain another given as [Password], but whenever that happens it will have a respective field in the string that has Json (message).

In the end the result would be.

String conteudo = "Olá Marconcilio, Tenha um bom dia ... hoje é 21/01/18 e é seu aniversario";
    
asked by anonymous 18.01.2018 / 20:07

1 answer

2

You can deserialize JSON in a dictionary and then iterate over this dictionary to make substitutions in template .

Note that in my example, I use the NewstonSoft.Json package to deserialize JSON with the answers. This is not necessary, you can use any other serializer, I chose this by custom. This does not make any difference to the main idea.

string Transformar(string template, string json)
{
    var dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(json); 

    string nova = template;
    foreach(var par in dict)
    {
        nova = nova.Replace($"[{par.Key}]", par.Value);
    }

    return nova;
}

void Main()
{
    string json = "{\"Nome\": \"Marconcilio\", \"Data\": \"21/01/18\"}";
    string template = "Olá [Nome], Tenha um bom dia ... hoje é [Data] e é seu aniversario";

    Console.WriteLine(template);
    // Olá [Nome], Tenha um bom dia ... hoje é [Data] e é seu aniversario
    Console.WriteLine(Transformar(template, json));
    // Olá Marconcilio, Tenha um bom dia ... hoje é 21/01/18 e é seu aniversario
}

See working in .NET Fiddle.

I made "marconcilio" a change to navigation object in json.

string Transformar(string template, string json)
{
    var dict = JsonConvert.DeserializeObject<Dictionary<object, object>>(json); 


    string nova = template;
    foreach(var par in dict)
    {
        if(par.Value.ToString().Contains ("{"))
        {
            nova = Transformar(nova, par.Value.ToString());
        }

      nova = nova.Replace(string.Format("[{0}]", par.Key), par.Value.ToString());
    }

    return nova;
}

public void Main()
{
    string json = "{ \"Nome\": \"Marconcilio\",\"destinatarioDaNotificacao\": {\"Data\": 11},\"Notificacao\": {\"Teste\": \"novo\"}}";
    string template = "Olá [Nome], Tenha um bom dia ... hoje é [Data] e é seu aniversario .. [Teste]";

    Console.WriteLine(template);
    Console.WriteLine(Transformar(template, json));
}
    
18.01.2018 / 20:49