使用https://github.com/nlohmann/json,我试图将值赋给递归数据结构(json_node_t):
#include <iostream>
#include <string>
#include <vector>
#include "json.hpp"
using namespace std;
using json = nlohmann::json;
struct json_node_t {
int id;
std::vector<json_node_t> children;
};
void to_json(json& j, const json_node_t& node) {
j = {{"ID", node.id}};
if (!node.children.empty())
j.push_back({"children", node.children});
}
int main() {
json_node_t node_0;
std::vector<int> values = {1,2,3};
std::vector<json_node_t> parents;
parents.resize(20);
for(int i = 0; i < values.size(); i++) {
if ( i == 0 )
{
node_0.id = values[0];
std::vector<json_node_t> node_children_;
node_0.children = node_children_;
parents[0] = node_0;
} else {
json_node_t node_i;
node_i.id = values[i];
std::vector<json_node_t> node_i_children_;
parents[i] = node_i;
parents[i-1].children.push_back(node_i);
}
}
json j = node_0;
cout << j.dump(2) << endl;
return 0;
}
我的目的是创建一个类似于以下内容的JSON表示:
{
"ID": 1,
"children": [
{
"ID": 2
},
{
"ID": 3,
"children": []
}
]
}
但是,嵌套的子项不会被打印。我只得到这个输出:
{
"ID": 1
}
有什么问题?我无法将孩子与父母联系正确。我该如何解决这个问题?
答案 0 :(得分:0)
您输出<h3 style='margin-bottom: 0;'><u>MANAGEMENT SUMMARY</u></h3>
,但您永远不会附加任何子项。原因是node_0;
份parents[0] = node_0;
。因此,当您node_0
将parents[0].children.push_back(node_i);
作为孩子附加到node_i
的副本时 - 原始版本保持不变。这就是为什么它最终不包含任何孩子。
修改强> 我的代码。
node_0
输出:
#include "json.hpp"
#include <memory>
#include <vector>
#include <iostream>
struct json_node;
using json_node_ptr = std::shared_ptr<json_node>;
struct json_node
{
int id;
std::vector<json_node_ptr> children;
json_node(int _id)
: id{ _id }
{
}
};
void to_json(nlohmann::json& j, const json_node_ptr& node)
{
j = {{"ID", node->id}};
if (!node->children.empty()) {
j.push_back({"children", node->children});
}
}
int main()
{
std::vector<int> values = {1,2,3};
std::vector<json_node_ptr> parents;
for(int i = 0; i < values.size(); i++)
{
if ( i == 0 ) {
auto root = std::make_shared<json_node>(values[0]);
parents.push_back(root);
} else {
parents.push_back(std::make_shared<json_node>(values[i]));
parents[i-1]->children.push_back(parents[i]);
}
}
nlohmann::json j = parents[0];
std::cout << j.dump(2) << std::endl;
return 0;
}