C++オープンソースライブラリrapidjson:簡単に使用


GitHubダウンロードアドレス:rapidjson
特性参考公式説明:効率的なC++JSON解析/ジェネレータ
または:RapidJSONドキュメント
解凍されたディレクトリは次のとおりです.
rapidjson-master
|-- CHANGELOG.md
|-- CMakeLists.txt
|-- CMakeModules
|-- RapidJSON.pc.in
|-- RapidJSONConfig.cmake.in
|-- RapidJSONConfigVersion.cmake.in
|-- appveyor.yml
|-- bin
|-- contrib
|-- doc
|-- docker
|-- example
|-- include
|-- include_dirs.js
|-- library.json
|-- license.txt
|-- package.json
|-- rapidjson.autopkg
|-- readme.md
|-- readme.zh-cn.md
|-- test
|-- thirdparty
`-- travis-doxygen.sh

使用するにはincludeフォルダをコピーするだけです.
include
`-- rapidjson
    |-- allocators.h
    |-- cursorstreamwrapper.h
    |-- document.h
    |-- encodedstream.h
    |-- encodings.h
    |-- error
    |-- filereadstream.h
    |-- filewritestream.h
    |-- fwd.h
    |-- internal
    |-- istreamwrapper.h
    |-- memorybuffer.h
    |-- memorystream.h
    |-- msinttypes
    |-- ostreamwrapper.h
    |-- pointer.h
    |-- prettywriter.h
    |-- rapidjson.h
    |-- reader.h
    |-- schema.h
    |-- stream.h
    |-- stringbuffer.h
    `-- writer.h

 
コードディレクトリ構造のテスト:
|-- jsonfile.txt
|-- makefile
|-- rapidjson
`-- test.cpp

test.cpp :
#include "rapidjson/document.h"
#include 
#include 
using namespace rapidjson;
using namespace std;

int main()
{
  char*buffer = NULL;
  //        
  filebuf *pbuf;
  ifstream filestr;
  long size;
  //        ,          
  filestr.open ("jsonfile.txt", ios::binary);
  if (!filestr)
    return -1;
  //   filestr  buffer      
  pbuf=filestr.rdbuf();
  
  //   buffer          
  size=pbuf->pubseekoff (0,ios::end,ios::in);
  pbuf->pubseekpos (0,ios::in);
   
  //       
  buffer=new char[size];
   
  //       
  pbuf->sgetn (buffer,size);
  
  filestr.close();

  //    json
  Document document;
  document.Parse(buffer);
  if (document.HasParseError())
  {
    return -1;
  }
  assert(document.IsObject());

  for (rapidjson::Value::ConstMemberIterator iter = document.MemberBegin(); iter != document.MemberEnd(); iter++)
  {
    if (iter->name.IsString())
    {
      switch(iter->value.GetType())
      {
        case 0:
          cout << "null" <value.IsNull() <

jsonfile.txt:
{
    "hello": "world",
    "t": true ,
    "f": false,
    "n": null,       
    "i": 123,
    "pi": 3.1416,
    "a": [1, 2, 3, 4]
}

出力:
string
true
false
null
num
num
array

 
参照先:
C、C++ファイル全体を一度にメモリに読み込む
rapidjson未知jsonデータ解析を実現
RapidJSONドキュメント