Json写入树形结构,并转成string,可被其他模块(比如,cgi)调用:
#include <json/json.h>
...
struct Node{
string tag_name;
vector<string> children_tag_key;
};
unordered_map<string, Node> tag_node_dict;
...
Json::Value tag_tree_json_build(string tag_key)
{
Json::Value jv_node;
string tag_name = tag_node_dict[tag_key].tag_name;
jv_node["name"] = tag_name;
for (uint32_t i=0; i<(tag_node_dict[tag_key].children_tag_key).size(); i++)
{
string tag_key_son = tag_node_dict[tag_key].children_tag_key[i];
Json::Value jv_son = tag_tree_json_build(tag_key_son);
jv_node["children"].append(Json::Value(jv_son));
}
return jv_node;
}
...
Json::Value jv_root = tag_tree_json_build("root");
Json::FastWriter writer;
string tag_tree = writer.write(jv_root);
下面是手动构造,以便更好理解上面的递归
// a demo manually
Json::Value jv_root;
jv_root["name"] = Json::Value("root");
Json::Value node_1, node_2, node_3, node_4, node_1_1, node_1_2;
node_1["name"] = Json::Value("动物");
node_1_1["name"] = Json::Value("猫");
node_1_2["name"] = Json::Value("狗");
node_1["children"].append(Json::Value(node_1_1));
node_1["children"].append(Json::Value(node_1_2));
node_2["name"] = Json::Value("植物");
node_3["name"] = Json::Value("生活用品");
node_4["name"] = Json::Value("交通工具");
jv_root["children"].append(Json::Value(node_1));
jv_root["children"].append(Json::Value(node_2));
jv_root["children"].append(Json::Value(node_3));
jv_root["children"].append(Json::Value(node_4));