一尘不染

将C ++类转换为JSON

json

我想创建一个包含我的类的实例变量的JSON字符串。

例如,

class Example {  
    std::string string;  
    std::map<std::string, std:string> map;  
    std::vector<int> vector;  
};

会成为:

{
    "string":"the-string-value",
    "map": {
        "key1":"val1",
        "key2":"val2"
    },
    "vector":[1,2,3,4]
}

我研究了几个用于创建JSON的C
++库,它们似乎都异常复杂。我想要类似Javascript的东西JSON.stringify(object)。换句话说,只需将std ::
map传递给它并接收一个字符串。该地图可能包含其他地图,向量,列表,字符串,数字和布尔值。

最好的方法是什么?

谢谢你的帮助。

编辑

我研究了以下内容:

json spirit,jsoncpp,zoolib,JOST,CAJUN,libjson,nosjob,JsonBox,jsonme–

据我了解,我可以像下面的答案中那样构造一个单独的JSON对象,然后转换为JSON,我希望能够将我的东西存储在标准集合中并进行转换。

编辑2

好的,放弃序列化类的想法,因为在C ++缺乏反思的情况下看来这是不可能的。

有没有一种好方法可以将包含std:maps,std :: vectors,std :: lists,数字,字符串和布尔值的std ::
map转换为JSON,而无需更改数据类型或将数据复制到新的数据类型?

谢谢。


阅读 346

收藏
2020-07-27

共1个答案

一尘不染

JSON Spirit允许您这样做:

Object addr_obj;

addr_obj.push_back( Pair( "house_number", 42 ) );
addr_obj.push_back( Pair( "road",         "East Street" ) );
addr_obj.push_back( Pair( "town",         "Newtown" ) );

ofstream os( "address.txt" );
os.write( addr_obj, os, pretty_print );
os.close();

输出:

{
    "house_number" : 42,
    "road" : "East Street",
    "town" : "Newtown"
}

json_map_demo.cpp将是一个不错的地方开始,我想。

2020-07-27