RapidJSONのいくつかの操作しやすいマクロ定義
3119 ワード
以前はCCJsonConventerを使ってJSON文字列をCCDictionaryオブジェクトに変換していましたが、現在はcococos 2 d-x 3.xを使っているのでCCDictionaryはお勧めできません.また、JSONライブラリもrapidjsonに変更されていますが、私はしばらく良いパッケージが見つかりませんでした.
文字列を取得するなど、使用も簡単です.
/*
* =====================================================================================
*
* Filename: RapidJsonMacro.h
*
* Description: Easy macro to operate RapidJSON
*
* Version: 1.0
* Created: 12/26/2014 11:38:23
* Revision: none
* Compiler: gcc
*
* Author: Jason Tou (), [email protected]
* Organization:
*
* =====================================================================================
*/
#pragma once
#include "json/rapidjson.h"
#include "json/document.h"
//
#define json_check_is_bool(value, strKey) (value.HasMember(strKey) && value[strKey].IsBool())
#define json_check_is_string(value, strKey) (value.HasMember(strKey) && value[strKey].IsString())
#define json_check_is_int32(value, strKey) (value.HasMember(strKey) && value[strKey].IsInt())
#define json_check_is_uint32(value, strKey) (value.HasMember(strKey) && value[strKey].IsUint())
#define json_check_is_int64(value, strKey) (value.HasMember(strKey) && value[strKey].IsInt64())
#define json_check_is_uint64(value, strKey) (value.HasMember(strKey) && value[strKey].IsUint64())
#define json_check_is_float(value, strKey) (value.HasMember(strKey) && value[strKey].IsFloat())
#define json_check_is_double(value, strKey) (value.HasMember(strKey) && value[strKey].IsDouble())
#define json_check_is_number(value, strKey) (value.HasMember(strKey) && value[strKey].IsNumber())
#define json_check_is_array(value, strKey) (value.HasMember(strKey) && value[strKey].IsArray())
// ,
#define json_check_bool(value, strKey) (json_check_is_bool(value, strKey) && value[strKey].GetBool())
#define json_check_string(value, strKey) (json_check_is_string(value, strKey) ? value[strKey].GetString() : "")
#define json_check_int32(value, strKey) (json_check_is_int32(value, strKey) ? value[strKey].GetInt() : 0)
#define json_check_uint32(value, strKey) (json_check_is_uint32(value, strKey) ? value[strKey].GetUint() : 0)
#define json_check_int64(value, strKey) (json_check_is_int64(value, strKey) ? ((value)[strKey]).GetInt64() : 0)
#define json_check_uint64(value, strKey) (json_check_is_uint64(value, strKey) ? ((value)[strKey]).GetUint64() : 0)
#define json_check_float(value, strKey) (json_check_is_float(value, strKey) ? ((value)[strKey]).GetFloat() : 0)
#define json_check_double(value, strKey) (json_check_is_double(value, strKey) ? ((value)[strKey]).GetDouble() : 0)
// Value
#define json_check_value_ptr(value, strKey) (((value).HasMember(strKey)) ? &((value)[strKey]) : nullptr)
文字列を取得するなど、使用も簡単です.
void getName(const rapidjson::Value& data)
{
std::string strName = json_check_string(data, "name");
}
ただし、ここでは読み取り専用のデータを羅列した操作だけで、書き込み操作はまだ行われていません.jsonデータはクライアントで解析する操作が多いようですが、後で使ってまとめましょう.