gpt4 book ai didi

c++ - 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的 vector ?

转载 作者:行者123 更新时间:2023-12-01 14:43:23 36 4
gpt4 key购买 nike

我问了this问题,答案对于常规(非嵌套)对象非常有效:

[
{
"Name": "test",
"Val": "test_val"
},
{
"Name": "test2",
"Val": "test_val2"
}
]

与结构:
struct Test {
string Name;
string Val;
};

但是,当我尝试使用嵌套结构时,如下所示:
struct Inner {
string Name;
string Value;
};

struct Outer {
string Display;
int ID;
Inner Nested
};

//with json

"
[
{
"Display": "abcd",
"ID": 100,
"Nested": {
"Name": "Test Name",
"Value": "Test Value"
}
}
]
"

它给了我这个错误:
In function 'void from_json(const json&, Outer&)':
parser/run.cc:16:41: error: no matching function for call to 'nlohmann::basic_json<>::get_to(std::vector<Inner>&) const'
j.at("Inner").get_to(p.Inner);

最佳答案

错误消息听起来像是您为Outer而不是Inner编写了一个辅助函数。只要您为每种用户定义的类型编写一个辅助函数,该库就可以处理嵌套结构:

void from_json(const nlohmann::json& j, Inner& i) {
j.at("Name").get_to(i.Name);
j.at("Value").get_to(i.Value);
}

void from_json(const nlohmann::json& j, Outer& o) {
j.at("Display").get_to(o.Display);
j.at("ID").get_to(o.ID);
j.at("Nested").get_to(o.Nested);
}

然后,它就像您希望的那样工作:

auto parsed = json.get<std::vector<Outer>>();

演示: https://godbolt.org/z/pGsxxn

关于c++ - 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60331389/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com