使用nlohmann::json
,可以使用几个不同的表达式来解析对象:
type x = json;
type x; x = json.get<type>();
但是,type x; x = json;
不起作用,因为这将需要为type
添加一个新的赋值运算符。
我发现自己比表达式(1)更需要使用表达式(2)。这可能会很烦人,尤其是在type
很复杂的情况下。
在某些情况下,我定义了
template <typename U>
void convert(const json& j, U& x) { x = j.get<U>(); }
但是如果get
带有一个以引用作为参数的重载,那就太好了,这样下面的事情就有可能了。
type x;
json.get(x);
是否已经有一个函数可以执行该操作,而只是具有不同的名称?我在文档中找不到一个。
编辑:我已经在GitHub上提交了issue。
编辑2 :版本3.3.0中将包含get
函数的替代方法T& get_to(T&)
。
答案 0 :(得分:2)
但是,
type x; x = json;
不起作用
它确实有效。 basic_json
类型has a templated conversion operator会为您调用get<T>()
。以下代码compiles just fine:
#include <nlohmann/json.hpp>
using nlohmann::json;
namespace ns {
struct MyType {
int i;
};
void to_json(json& j, MyType m) {
j = json{{"i", m.i}};
}
void from_json(json const& j, MyType& m) {
m.i = j.at("i");
}
}
int main() {
json j{{"i", 42}};
ns::MyType type;
type = j;
}