C ++でJSONを解析する方法

How Parse Json C



このチュートリアルの目的は、JSONデータとC ++でJSONデータを解析する方法を理解することです。 JSONデータ、オブジェクト、配列、JSON構文について説明した後、いくつかの実用的な例を実行して、C ++でのJSONデータの解析メカニズムを理解します。

JSONとは何ですか?

JSON は、構造化データを整理された方法で保存および転送するための軽量のテキストベースの表現です。 JSONデータは、順序付きリストとキーと値のペアの形式で表されます。 JSONは NS エイバ NS クリプト また bject NS otation。フルネームが示すように、JavaScriptから派生しています。ただし、JSONデータは、一般的なプログラミング言語のほとんどでサポートされています。







サーバーからWebページにデータを転送するためによく使用されます。構造化データをJSONで表現する方が、XMLよりもはるかに簡単でクリーンです。



JSON構文規則

JSON構文規則は次のとおりです。



  1. JSONデータは、常にキーと値のペアの形式である必要があります。
  2. JSONデータはコンマで区切られます。
  3. 中括弧は、JSONオブジェクトを表すために使用されます。
  4. 角括弧は、JSON配列を表すために使用されます。

JSONデータとは何ですか?

JSONデータは、キーと値のペアの形式で表されます。これは、他のプログラミング言語の辞書やハッシュに似ています。





名前:ドレイク

これは単純なJSONデータの例です。ここでのキーは名前であり、ドレイクは対応する値です。キー、つまり名前と値、つまりドレイクはコロンで区切られています。



JSONファイル拡張子

JSONデータは通常、拡張子.jsonのファイルに保存されます。たとえば、従業員のデータを保存するには、ファイルに「employee.json」という名前を付けるだけです。これは単純なテキストファイルになります。その後、このJSONファイルをお気に入りのテキストエディターで開くことができます。

JSONオブジェクト

JSONオブジェクトは、中括弧で囲まれたJSONデータに他なりません。次に、JSONオブジェクトのサンプルを示します。

{{
名前ドレイク
従業員ID23547a
電話 23547
デパートメントファイナンス
}

JSONオブジェクトには、複数のJSONデータを含めることができます。各JSONデータはコンマで区切られます。 JSONデータは、キーと値のペアとして表されます。キー、つまり名前と値、つまりドレイクはコロンで区切られています。上記の例では、4つのキーと値のペアがあります。最初のキーは名前です。ドレイクはそれに対応する値です。同様に、EmployeeID、Phone、およびDepartmentは他の3つのキーです。

JSON配列

JSON配列には、コンマで区切られた複数のJSONオブジェクトを含めることができます。 JSON配列は角括弧で囲まれています。 JSON配列の例を見てみましょう。

'学生'[
{{'ファーストネーム'「ショーン」 '苗字''茶色'}
{{'ファーストネーム'「ドレイク」 '苗字'「ウィリアムズ」}
{{'ファーストネーム'「トム」 '苗字'「ミラー」}
{{ファーストネームピーター苗字ジョンソン}
]

これはJSON配列の例です。ここで、Studentsは角括弧、つまり配列で囲まれており、4つのJSONオブジェクトが含まれています。これらの各オブジェクトは、キーと値のペアの形式で表され、コンマで区切られます。

サンプルJSONファイル

ここで、JSONデータ、JSONオブジェクト、JSON配列について理解したので、JSONファイルの例を見てみましょう。

{{
ファーストネームショーン
苗字茶色
学生証 21453
デパートメントコンピュータサイエンス
科目[算数ファイ化学]
}

C ++でのライブラリの解析:

C ++でJSONデータを解析するためのネイティブソリューションはありません。ただし、C ++でJSONデータを解析するためのライブラリがいくつかあります。この記事では、C ++でJSONデータを解析するための最も一般的な2つのライブラリについて説明します。 JSONデータを解析するためのGitHubリンクは次のとおりです。

  1. https://github.com/nlohmann/json
  2. https://github.com/Tencent/rapidjson/

以下に示す例を実行できるようにするには、これらのライブラリをダウンロードすることをお勧めします。

これで、JSONデータ、オブジェクト、配列、および使用可能な解析ライブラリについての基本的な理解ができました。次に、C ++でJSONデータを解析するためのいくつかの例を見てみましょう。

  • 例-1:C ++でJSONを解析する
  • 例2:C ++でのJSONの解析とシリアル化
  • 例-3:C ++でJSONを解析する

例1と例2では、​​nlohmannライブラリを利用します。例3の場合、RapidJSONライブラリを使用します。

例-1:C ++でJSONを解析する

このサンプルプログラムでは、C ++でJSONデータの値にアクセスする方法を示します。

#含む
#include'json.hpp '

jsonを使用する=nlohmann:::json;

int主要(()。
{{

// jdEmployees
json jdEmployees=
{{
{{'ファーストネーム'「ショーン」}
{{'苗字''茶色'}
{{'学生証'21453}
{{'デパートメント'「コンピュータサイエンス」}
};

//値にアクセスします
時間:::ストリングfName=jdEmployees。価値(('ファーストネーム' 'おっとっと')。;
時間:::ストリングlName=jdEmployees。価値(('苗字' 'おっとっと')。;
intsID=jdEmployees。価値(('学生証' 0)。;
時間:::ストリング部門=jdEmployees。価値(('デパートメント' 'おっとっと')。;

//値を出力します
時間:::費用 << 'ファーストネーム: ' <<fName<<時間:::endl;
時間:::費用 << '苗字: ' <<lName<<時間:::endl;
時間:::費用 << '学生証: ' <<sID<<時間:::endl;
時間:::費用 << 'デパートメント: ' <<部門<<時間:::endl;

戻る 0;
}

例2:C ++でのJSONの解析とシリアル化

このサンプルプログラムでは、C ++でJSONを解析およびシリアル化する方法を説明します。 JSONデータを解析するためにjson :: parse()を使用しています。

#含む
#include'json.hpp '
#含む

jsonを使用する=nlohmann:::json;

int主要(()。
{{
//これがJSONテキストです
char文章[] =NS'(
{{
'
':{
'
':450、
'
身長':30、
'
題名':'こんにちは世界'、
'
isBiography': NS、
'
NumOfCopies':4、
'
LibraryID':[2319、1406、3854、987]
}
}
) '
;

// JSONを解析してシリアル化しましょう
json j_complete=json:::解析する((文章)。;
時間:::費用 <<時間:::setw((4)。 <<j_complete<<時間:::endl;
}

例-3:C ++でJSONを解析する

次に、RapidJSONライブラリを使用してJSON文字列を解析する方法を示します。 RapidJSONはもともとRapidXMLに触発されました。このサンプルプログラムでは、JSON文字列をDOMに解析しています。 Document型のmydocを宣言し、mydoc.parse()メソッドを使用してJSON文字列を解析しました。

#含む
#include'rapidjson / writer.h '
#include'rapidjson / document.h '
#include'rapidjson / stringbuffer.h '

名前空間rapidjsonを使用する;

int主要(()。
{{

const char*json= '{'ファーストネーム':'ショーン'、'苗字':'茶色'、'empId':21453、
'
デパートメント':'コンピュータサイエンス'}';

// JSON文字列をDOMに解析します
mydocを文書化する;
mydoc。解析((json)。;

// DOMから文字列
StringBufferバッファ;
作家<StringBuffer>>作家((バッファ)。;

mydoc。承認((作家)。;

//出力を出力します
時間:::費用 <<バッファ。GetString(()。 <<時間:::endl;

戻る 0;
}

結論

この記事では、簡単に説明しました JSON データ、オブジェクト、配列、および構文。ご存知のとおり、C ++でのJSONデータ解析のネイティブソリューションはありません。 2つの異なるライブラリを使用してC ++でJSONデータを解析しました。 C ++でのJSONデータ解析メカニズムを示すために、3つの異なる例を調べました。 nlohmannライブラリと比較すると、RapidJSONは小さく、高速で、メモリに優しいです。