Nlohmann json获取类型推导

时间:2018-09-05 18:40:45

标签: c++ nlohmann-json

使用nlohmann::json,可以使用几个不同的表达式来解析对象:

  1. type x = json;
  2. 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&)

1 个答案:

答案 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;
}