如何在C++中表示JSON文档的递归对象结构?
How to represent recursive Object structure of JSON Documents in C++?
我想表示一个类似 json 的文件,如下所示......
{
root_att_0: 23,
root_att_1:
{
root_att_1_att_0: "Peter",
root_att_1_att_1: 3.14f
},
root_att_2: ["Hello", "World"],
root_att_3:
{
root_att_3_att_0: 64,
root_att_3_att_1:
{
root_att_3_att_1_att_0: 123
}
},
root_att_4: true
}
在C++使用如下图所示的树结构
...JSON 结构图
我试图使用以下代码实现该表示...
using JSONType = std::variant
<
bool,
int,
float,
double,
std::string,
std::vector<bool>,
std::vector<int>,
std::vector<float>,
std::vector<double>,
std::vector<std::string>
>;
struct JSONObject
{
std::unordered_map<std::string, std::variant<JSONType, JSONObject>> attributes;
};
int main()
{
JSONObject o
{
{"string", std::variant<JSONType, JSONObject>(JSONType(true))}
};
}
但是在使用unordered_map条目初始化 JSONObject o 时,我总是收到以下错误。我不明白为什么我在初始化中给出的值 错了...
no instance of constructor "std::unordered_map<_Kty, _Ty, _Hasher,
_Keyeq, _Alloc>::unordered_map [with _Kty=std::string,
_Ty=std::variant<JSONType, JSONObject>,
_Hasher=std::hash<std::string>, _Keyeq=std::equal_to<std::string>,
_Alloc=std::allocator<std::pair<const std::string,
std::variant<JSONType, JSONObject>>>]" matches the argument list
argument types are: (const char [7], std::variant<JSONType, JSONObject>)
JSONObject o
{
{"string", std::variant<JSONType, JSONObject>(JSONType(true))}
};
缺少一组大括号。您需要一个用于JSONObject
的集合,一个用于attributes
成员的集合和一个用于映射条目的最终集:
JSONObject o
{
{
{"string", std::variant<JSONType, JSONObject>(JSONType(true))}
}
};
相关文章:
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 如何在C++中表示JSON文档的递归对象结构?
- C++删除/(递归)对象销毁问题
- C++递归地在类构造函数中创建对象
- 在递归函数中更有效地创建对象和对象数组?C++
- 视觉 在C++中,我试图在没有递归的情况下循环访问许多对象
- 以对象作为函数参数的 C++ 递归
- 带有对象的尾递归
- 提升递归对象的序列化
- C++无法在递归中删除对象的常量
- C++:使用递归在二叉搜索树中插入对象
- 递归包含自身列表的对象
- 递归模板:对象<auto_ptr<object>>
- 递归调用函数对象
- dynamic_cast是否检查被查询对象的type_info对象,或者递归地检查
- 对一个对象上的每个元组元素调用函数,不进行递归
- 基于字符串递归输入Json对象
- 递归共享库加载-无法打开共享对象文件
- C++:在递归函数中创建新对象
- 全局范围的对象不是递归初始化的