0

我正在使用 libjson 在 C++ 中解析 JSON 文件。我想知道您是否可以为地图做类似 PHP 样式的表示法:

只是一些伪代码:

mapObj["id"] = 4;
mapObj["tags"] = vector {"Foo", "Bar"};

structMapObj = {
    {"name", "FooBar"},
    {"size", 1234567},
    {"date", "2014-12-24"}
};
mapObj["file"] = anotherMapObject;


// for the vector
mapObj["tags"][0];
mapObj["tags"][1];
mapObj["tags"].size();
mapObj["tags"].pushBack("Foo");

// for the map
mapObj["file"]["name"]
...

是否有可能收到这样的结果?

也许是 BaseClass 中当前类型的枚举?

myObj["key"].getType; // returns a 1 for example an INT

我尝试使用 BaseClass 和模板类来实现它,但我无法遍历该对象。或者我什至应该为我的 BaseClass 重载运算符?或者是否有必要为每种情况(映射类型对象的类、int 类型的类、字符串等)继承 BaseClass?

我现在有点绝望。只需要有人带领我走向正确的方向:-P

PS:我不想使用 boost :-/

非常感谢,

丹尼尔

4

2 回答 2

1

我很感激你不想使用 boost。不过这个问题在boost中已经解决了。

您本质上想要一个字符串到变体的映射。

查看 boost::variant 和 boost::any 的源代码。请特别注意 boost 如何解决递归定义的问题,例如,当您想将地图存储在另一个地图的元素中时。

这将教你比你想知道的更多关于这个主题:-)

于 2014-05-10T13:30:42.283 回答
0

有一个用于 C++Builder 程序员的开源项目,称为 JSonCBB 库。这个库提供了一个符合您需要的语义:http: //www.cbuilderblog.com/jsoncbuilderblog-class-library/

于 2014-05-10T13:35:22.780 回答