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++

4个回答

不可以,因为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()) {
        ...;
    }

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问