Cocos2d-x v3.3 JSONの使い方 (Rapidjson)

Cocos2d-x 3.3 内蔵のrapidjsonのJSON使用方法についてメモ

JSON解析

JSON配列に入った要素を順に取り出す
※パース以外の処理は適当です

#include "cocos2d.h"

#include "json/rapidjson.h"
#include "json/document.h"
#include "json/stringbuffer.h"
#include "json/writer.h"

#include <string.h>

USING_NS_CC;
using namespace rapidjson;

#define ARRY_ROOT  "root"
#define KEY_INT  "int"
#define KEY_STRING "string"

bool XXX::parseJson(const char* jsonText) {
    // JSON解析
    rapidjson::Document document;
    document.Parse<0>(jsonText);
    if (document.HasParseError()) {
    	// 解析エラー
        return false;
    }
    // データ取得
    if (document.IsObject()) {
        // JSON配列取得
        if (document.HasMember(ARRY_ROOT) && document[ARRY_ROOT].IsArray()) {
            const rapidjson::Value& arr = document[ARRY_ROOT];
            // 要素取得
            for (int i = 0, max = arr.Size(); i < max; i++) {
                if (arr[i].HasMember(KEY_INT)) {
                	  int n = arr[i][KEY_INT].GetInt();
                }
                if (arr[i].HasMember(KEY_STRING)) {
                	 std::string s = arr[i][KEY_STRING].GetString();
                }
            }
        }
    }
    return true;
}

JSON作成

JSON配列に要素を順に詰め込む
※パース以外の処理は適当です

#include "cocos2d.h"

#include "json/rapidjson.h"
#include "json/document.h"
#include "json/stringbuffer.h"
#include "json/writer.h"

#include <string.h>

USING_NS_CC;
using namespace rapidjson;

#define ARRY_ROOT  "root"
#define KEY_INT  "int"
#define KEY_STRING "string"

std::string XXX::createJson() {
    // JSON生成
    Document document;
    document.SetObject();
    rapidjson::Document::AllocatorType& allocator = document.GetAllocator();
    
    // JSON配列生成
    rapidjson::Value jsonArray(rapidjson::kArrayType);
    // 要素生成
    for (int i = 0; i < 10; i++) {
        rapidjson::Value object(rapidjson::kObjectType);
        object.AddMember<unsigned int>(KEY_INT,  i, allocator);
        object.AddMember<const char*>(KEY_STRING, "test", allocator);
        // 配列に追加
        jsonArray.PushBack(object, allocator);
    }
    // JSON配列追加
    document.AddMember(ARRY_ROOT, jsonArray, allocator);
    
    // StringBufferへ書き出し
    rapidjson::StringBuffer buffer;
    rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
    document.Accept(writer);
    
    // JSON文字列取得
    const char* result = buffer.GetString();
    
    // string生成
    std::string str(result);
    
    return str;
}