0

C++ で JSON ファイルを解析するために libjson を使用しています。マップの 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 の演算子をオーバーロードする必要がありますか? それとも、ケースごとに BaseClass を継承する必要がありますか (マップ型オブジェクトのクラス、int 型のクラス、文字列のクラスなど)?

私は今、少し絶望的です。私を正しい方向に導く人が必要です:-P

PS: ブーストは使いたくない :-/

どうもありがとうございました、

ダニエル

4

2 に答える 2

1

ブーストを使用したくないことに感謝します。しかし、この問題はブーストで解決されました。

基本的に、文字列からバリアントへのマップが必要です。

boost::variant と boost::any のソース コードを見てください。たとえば、別のマップの要素内にマップを格納する場合など、再帰定義の問題をブーストがどのように回避するかに特に注意してください。

これは、このテーマについて知りたかった以上のことを教えてくれます:-)

于 2014-05-10T13:30:42.283 に答える
0

JSonCBB ライブラリと呼ばれる C++Builder プログラマ向けのオープン ソース プロジェクトがあります。このライブラリは、必要に応じてセマンティックを提供します: http://www.cbuilderblog.com/jsoncbuilderblog-class-library/

于 2014-05-10T13:35:22.780 に答える