c++解析json是否可以像JAVA一样封装成通用的方法

比如在java中,将json字符串转为对象可以用gson,转的方式大致如下:

public static <T> T json2obj(String json, Class<T> clz) {
            Gson gson = new Gson();
            T object = gson.fromJson(json, clz);
            return object;
    }

这是一个通用的方法,将json字符串转为对象,不用关心对象里面的字段名称;我现在刚接触c++,在http请求服务器后解析json,每个http请求所返回的字段都不一样,是否也可以像java一样写一个统一的转换方法,而不是给每个请求的每个字段都写一个转换并赋值的方法

不可以,因为c++的类缺少元数据(metadata),因此无法实现java那样的反射(rtti/dc)

不过作为变通,可以在C++里定义一种支持递归的通用类型结构,来接受你json的数据(具体类结构模型,你可以参考微软的 IHTMLDocument 接口的实现方式)

用jsoncpp这个库吧 (https://github.com/open-source-parsers/jsoncpp ), 像java那样直接解析成类是不可以的。

#include <json/reader.h>

    Json::CharReaderBuilder b;
    Json::CharReader* reader (b.newCharReader());
    Json::Value root;
    Json::Value valu;
    JSONCPP_STRING errs;

    bool ok = reader->parse(message, message + std::strlen(message), &root, &errs);
    if (!ok) {
        delete reader;
        return;
    }

    if (!(valu = root["name"]).isNull()) {
        ...;
    }

用我的库吧:https://github.com/leoxiaofei/msserialization

图片说明

图片说明
应该也是实现,参考protobuf的方法,定义一个对象转的基类,写一个对象定义工具。生成类似.proto文件,保存对象的名称、命名空间、还有每个字段的名称、类型。再写一个代码生成工具,自动生成头文件和源文件,每个类都从基类继承。就可以实现任意对象(通过工具生成的)objecttojson、objectfromjson转换。

有cjson啊https://sourceforge.net/projects/cjson/