0

可以使用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 上提交了一个问题。

编辑 2 : 3.3.0 版中将包含该get功能的替代方案。T& get_to(T&)

4

1 回答 1

2

但是,type x; x = json;不起作用

它确实有效。该basic_json类型有一个模板化的转换运算符,它只需要get<T>()你。以下代码编译得很好

#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;
}
于 2018-09-05T19:01:57.390 回答