非常にシンプルで、C ++ JSONライブラリCJsonObjectを使用するCの使用など使用JSONを作るのは簡単推奨++のネイティブ構造は、任意とても便利です。CJsonObjectが良いC ++ JSONライブラリで、あなたが今まで見た中でC ++のJSONライブラリを使用するのが最も簡単かもしれません。CJsonObjectオープンソースアドレスがあるhttps://github.com/Bwar/CJsonObjectとhttps://gitee.com/Bwar/CJsonObject。CJsonObject上のオープンソースのブログ記事の冒頭で使用リリース「軽量簡単なC ++ライブラリJSON CJsonObjectを使用します」。
CJsonObject収入年間、何の意図的なプロモーション、130以上の星とGitHubの上の60のフォークへのアクセスは、実際には、ありませんがCJsonObjectオープンソースを持っていたとは何の関係も、CJsonObject使用にgithubのCJsonObjectに実際cJSONに(cJSONとフォークを関係を確立しますcJSON基づいています)は、SourceForgeの古いcJSONに基づいてバージョンを変更上のオープンソースプロジェクトを構築するための別の努力よりもBwarするためにいくつかのトラフィックを導入することである星雲を。意外なことに、構築し、努力にかかわらず、数やフォークの数の星雲の星を促進するためにブログの記事のいくつかの技術的な内容を書いたCJsonObject(数は観客との関係でもよい)よりも少ないです。Bwarは常にJSON、使いやすさと開発の効率化を使用したシナリオの大半ではなく、パフォーマンスを解析する、最初の一つであることを信じていました。使いやすさで、彼はCJsonObjectがCとしてJSONを作る++のネイティブデータ構造は、一般的にあまりないので、黄Poは強く推奨賞賛再び疑いを避けることはありませんと述べました!良いアップデートやメンテナンスをCJsonObject、ユーザの応答が問題に言及することは非常にタイムリーで、今年オープンしたユーザーの数が増加したが、彼らが必要とする機能をサポートしていません。
広くで主要なオープンソースプロジェクト星雲Bwarで使用CJsonObjectは、関係なく、外部の開発者に自分自身やBwarの、継続的に更新を維持する必要があります。少し宣伝を再生する方法は、星雲は、すぐに高い同時実行、配布し、弾力性を構築するためのC ++でのメッセージ駆動型アプリケーションのための強力なネットワークのIoCフレームワークです。インスタントメッセージング、データ収集、リアルタイムの計算、プッシュメッセージング、Webサービス、およびその他のバックグラウンドのシナリオに適した、星雲は時間稼働アプリケーションの場合通信、データ収集とリアルタイム組み込みポイント分析を持っています。あなたが良いCJsonObjectを感じた場合に星雲はまた星を指して、ありがとうございました。
CJsonObjectが新たに開発されたcJSON JSONライブラリのC ++版に基づいており、CJsonObject最大の利点は、高い開発効率、使いやすい軽量です。CJsonObjectだけで4つのファイル、ソースコードレベルの統合は、何のライブラリにコンパイルする必要があり、かつクロスプラットフォームとコンパイラになることはできませんにコピーします。読んで使用することは非常に簡単で生成するライブラリのアクセスネストされたJSON面倒異なる、CJsonObjectネストされたJSONを解析する最もJSONとは異なり。
次のように開発し、この問題を提起するCJsonObject発行ブログのプロジェクトのためのよくある質問をまとめて:
よくある質問
- 1.どのようにJSONのキー、および方の値を行き来するには?
std::string strTraversingKey;
std::string strTraversingValue;
while(oJson.GetKey(strTraversingKey))
{
if (oJson.Get(strTraversingKey, strTraversingValue))
{
std::cout << strTraversing << " : " << strTraversingValue << std::endl;
}
}
GetKey()は(JSON配列へのGetKeyを呼び出して、配列を横断する適用されません)単にfalseを返します。現在のレベルのJSONキーを取得するにはをループ、のGetKey())最後のキーは、次のトラバースは、その後(のGetKeyを呼び出すときに誤った表現がとられている返すのGetKey()関数を呼び出しは、最初のキーから再びスタートを取得します。別の言い方をすれば、のGetKey()トラバーサルJSONキーは値を返します、本当の本当の、真...真、偽、真、真、真...真、偽、真、真、真...真、 falseは、あなたが完全にユーザまでのホイールを通過したいどのくらいの。
あなたがブレークスルーを必要として最初からやり直す場合は、トラバースをリセットするためにResetTraversing()関数を呼び出すことができます。
std::string strTraversingKey;
std::string strTraversingValue;
while(oJson.GetKey(strTraversingKey))
{
if (strTraversingKey == "Auguest")
{
oJson.ResetTraversing();
break;
}
if (oJson.Get(strTraversingKey, strTraversingValue))
{
std::cout << strTraversing << " : " << strTraversingValue << std::endl;
}
}
// 因为上一个遍历中断时调用了ResetTraversing(),所以本次遍历又是从第一个key开始。如果上一个遍历中断时未调用ResetTraversing(),那这次遍历将是从上次终端的位置继续,这通常不是遍历的预期结果,因此,中断遍历时记得ResetTraversing()。
while(oJson.GetKey(strTraversingKey))
{
if (oJson.Get(strTraversingKey, strTraversingValue))
{
std::cout << strTraversing << " : " << strTraversingValue << std::endl;
}
}
__注意:__キーの追加のJSON現在のレベル()またはDelete()操作と、現在の繰り返しの失敗につながる、次のコールのGetKey()は、ゼロからスタートするキーを取得します。
- あなたは元の値を交換する必要があるかどうかの鍵は、値型のタイプと一致しているとき2.置き換えますか?
交換する()ファンクションキー、値型とは何の関係も交換してください。置換値の値に整数列である、または交換価値またはオブジェクトの配列が可能です。しかし、非必須として、私たちは前に交換型の値と同じタイプの置換値をお勧めします。
- 3. []と()なぜこの二つの演算子をオーバーロードしなければならない、違いは何オーバーロード?
[]またはJSONを、ネストされたJSONの1つのレベルをテイクダウンする文字列には適用されません、int型の基本的なタイプの便宜のために動作しJsonObject JsonArrayをリロード;)(その他のは、オーバーロードのGet()関数のシリーズです便利なコールは、かなり確実キーは、買収が成功したかどうかを決定するためのget()の戻り値を経由せずに存在する場合、呼び出し()エンコーディングは、get()を呼び出すよりも高速で、JsonObjectまたはJsonArrayには適用されません。
[]及び()戻り値は、2つを混合することができない、同じではありません。
- 4.どのようにCJsonObjectで、次のような2次元配列を作成するには?
{
"test":[
[{"test":1}],
[{"test":2}]
]
}
ネストされたJSON操作のCJsonObjectは、多くの柔軟な使い方がありますが、ネストされたJSONと読書の非常に柔軟で便利な世代です。
neb::CJsonObject oTest;
oTest.AddEmptySubArray("test");
for (int i = 1; i < 3; ++i)
{
neb::CJsonObject oDimension1;
neb::CJsonObject oDimension2;
oDimension2.Add("test", i);
oDimension1.Add(oDimension2);
oTest["test"].Add(oDimension1);
}
std::cout << oTest.ToString() << std::endl;
一つだけ書き込みがここにされて考えると、参照は、いくつかの他のFAQ#5かもしれません。
- 5.フォームを作成する方法をCJsonObjectを使用してアレイに頼みますか?
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
ここではJSON配列を生成するための3つの方法があります。
neb::CJsonObject oJson;
oJson.AddEmptySubArray("employees");
oJson["employees"].Add(neb::CJsonObject("{\"firstName\":\"John\" , \"lastName\":\"Doe\"}"));
oJson["employees"].Add(neb::CJsonObject("{\"firstName\":\"Anna\" , \"lastName\":\"Smith\"}"));
oJson["employees"].Add(neb::CJsonObject("{\"firstName\":\"Peter\" , \"lastName\":\"Jones\"}"));
neb::CJsonObject oJson;
oJson.AddEmptySubArray("employees");
oJson["employees"].Add(neb::CJsonObject("{}"));
oJson["employees"][0].Add("firstName", "John");
oJson["employees"][0].Add("lastName", "Doe");
oJson["employees"].Add(neb::CJsonObject("{}"));
oJson["employees"][1].Add("firstName", "Anna");
oJson["employees"][1].Add("lastName", "Smith");
oJson["employees"].Add(neb::CJsonObject("{}"));
oJson["employees"][2].Add("firstName", "Peter");
oJson["employees"][2].Add("lastName", "Jones");
neb::CJsonObject oJson;
neb::CJsonObject oJohn;
neb::CJsonObject oAnna;
neb::CJsonObject oPeter;
oJohn.Add("firstName", "John");
oJohn.Add("lastName", "Doe");
oAnna.Add("firstName", "Anna");
oAnna.Add("lastName", "Smith");
oPeter.Add("firstName", "Peter");
oPeter.Add("lastName", "Jones");
oJson.AddEmptySubArray("employees");
oJson["employees"].Add(oJohn);
oJson["employees"].Add(oAnna);
oJson["employees"].Add(oPeter);