Using Inja
Inja is the string templating library you’ll be using in this assignment. You’ll only need the most basic string replacement functionality, even though it can be much more advanced.
String templating looks like this:
#include "nlohmann/json.hpp"
#include "inja.hpp"
#include <string>
#include <iostream>
using JSON = nlohmann::json;
int main() {
std::string name;
int age;
std::cout << "What's your name?\n";
std::cin >> name;
std::cout << "How old are you?\n";
std::cin >> age;
JSON data;
data["name"] = name;
data["age"] = age;
std::string strTemplate =
"Hi, {{ name }}!\n"
"You are {{ age }} years old!\n";
std::cout << inja::render(strTemplate, data);
return 0;
}
Let’s deconstruct the example. First we have the includes that give us
access to the json
class that inja uses to store data as well as
the inja tools.
#include "nlohmann/json.hpp"
#include "inja.hpp"
Next we have a statement that’s purely for convenience purposes. It
aliases the json
class to JSON
. If we didn’t use this we could
refer to the json
class using the fully qualified name
nlohmann::json
.
using JSON = nlohmann::json;
Now we create our data object and fill it. If you have keys key1
and
key2
that map to values value1
and value2
respectively, the
general syntax is:
JSON data;
data["key1"] = value1;
data["key2"] = value2;
...
Almost done. You need to define your format string using the inja
syntax. To have the value replace the key in the string you need to
surround the key double braces like so: {{ keyname }}
.
std::string strTemplate = "{{ key1 }} {{ key2 }}";
Finally, you need to render
the data into the template:
std::string result = inja::render(strTemplate, data);