JSONCPP操作帮助
2017-04-19 20:23
351 查看
JSONCPP解析时比较麻烦,要判这判那的,于是直接简单封装了一个helper,如果要想面向对象可以直接改成类的静态成员。
jsoncpp_helper.h
#pragma once
#if( defined(WIN32) || defined(WIN64) )
#include "jsoncpp/include/json/json.h"
#else
#include "jsoncpp/json/json.h"
#endif
#include <string>
bool _TrimJsonValueString(Json::Value &Root, const char* pszNodeName, std::string& strOut);
bool _TrimJsonValueInt(Json::Value &Root, const char* pszNodeName, int& nOut, bool bFromString = false);
bool _TrimJsonValueUint(Json::Value &Root, const char* pszNodeName, unsigned int& nOut, bool bFromString = false);
bool _TrimJsonValueInt64(Json::Value &Root, const char* pszNodeName, int64_t& nOut);
bool _TrimJsonValueUint64(Json::Value &Root, const char* pszNodeName, uint64_t& nOut);
jsoncpp_helper.cpp:
#include "jsoncpp_helper.h"
bool _TrimJsonValueString(Json::Value &Root, const char* pszNodeName, std::string& strOut)
{
if (Root.isMember(pszNodeName) && !Root[pszNodeName].isNull() && Root[pszNodeName].isString())
{
strOut = Root[pszNodeName].asString();
return true;
}
return false;
}
bool _TrimJsonValueInt(Json::Value &Root, const char* pszNodeName, int& nOut, bool bFromString)
{
if (bFromString)
{
std::string strTmp;
if (!_TrimJsonValueString(Root, pszNodeName, strTmp)) return false;
nOut = atoi(strTmp.c_str());
return true;
}
if (Root.isMember(pszNodeName) && !Root[pszNodeName].isNull() && Root[pszNodeName].isInt())
{
nOut = Root[pszNodeName].asInt();
return true;
}
return false;
}
bool _TrimJsonValueUint(Json::Value &Root, const char* pszNodeName, unsigned int& nOut, bool bFromString)
{
if (bFromString)
{
std::string strTmp;
if (!_TrimJsonValueString(Root, pszNodeName, strTmp)) return false;
nOut = atoi(strTmp.c_str());
return true;
}
if (Root.isMember(pszNodeName) && !Root[pszNodeName].isNull() && Root[pszNodeName].isInt())
{
nOut = Root[pszNodeName].asInt();
return true;
}
return false;
}
bool _TrimJsonValueInt64(Json::Value &Root, const char* pszNodeName, int64_t& nOut)
{
std::string strTmp;
if (!_TrimJsonValueString(Root, pszNodeName, strTmp)) return false;
nOut = atoll(strTmp.c_str());
return true;
}
bool _TrimJsonValueUint64(Json::Value &Root, const char* pszNodeName, uint64_t& nOut)
{
std::string strTmp;
if (!_TrimJsonValueString(Root, pszNodeName, strTmp)) return false;
nOut = atoll(strTmp.c_str());
return true;
}
jsoncpp_helper.h
#pragma once
#if( defined(WIN32) || defined(WIN64) )
#include "jsoncpp/include/json/json.h"
#else
#include "jsoncpp/json/json.h"
#endif
#include <string>
bool _TrimJsonValueString(Json::Value &Root, const char* pszNodeName, std::string& strOut);
bool _TrimJsonValueInt(Json::Value &Root, const char* pszNodeName, int& nOut, bool bFromString = false);
bool _TrimJsonValueUint(Json::Value &Root, const char* pszNodeName, unsigned int& nOut, bool bFromString = false);
bool _TrimJsonValueInt64(Json::Value &Root, const char* pszNodeName, int64_t& nOut);
bool _TrimJsonValueUint64(Json::Value &Root, const char* pszNodeName, uint64_t& nOut);
jsoncpp_helper.cpp:
#include "jsoncpp_helper.h"
bool _TrimJsonValueString(Json::Value &Root, const char* pszNodeName, std::string& strOut)
{
if (Root.isMember(pszNodeName) && !Root[pszNodeName].isNull() && Root[pszNodeName].isString())
{
strOut = Root[pszNodeName].asString();
return true;
}
return false;
}
bool _TrimJsonValueInt(Json::Value &Root, const char* pszNodeName, int& nOut, bool bFromString)
{
if (bFromString)
{
std::string strTmp;
if (!_TrimJsonValueString(Root, pszNodeName, strTmp)) return false;
nOut = atoi(strTmp.c_str());
return true;
}
if (Root.isMember(pszNodeName) && !Root[pszNodeName].isNull() && Root[pszNodeName].isInt())
{
nOut = Root[pszNodeName].asInt();
return true;
}
return false;
}
bool _TrimJsonValueUint(Json::Value &Root, const char* pszNodeName, unsigned int& nOut, bool bFromString)
{
if (bFromString)
{
std::string strTmp;
if (!_TrimJsonValueString(Root, pszNodeName, strTmp)) return false;
nOut = atoi(strTmp.c_str());
return true;
}
if (Root.isMember(pszNodeName) && !Root[pszNodeName].isNull() && Root[pszNodeName].isInt())
{
nOut = Root[pszNodeName].asInt();
return true;
}
return false;
}
bool _TrimJsonValueInt64(Json::Value &Root, const char* pszNodeName, int64_t& nOut)
{
std::string strTmp;
if (!_TrimJsonValueString(Root, pszNodeName, strTmp)) return false;
nOut = atoll(strTmp.c_str());
return true;
}
bool _TrimJsonValueUint64(Json::Value &Root, const char* pszNodeName, uint64_t& nOut)
{
std::string strTmp;
if (!_TrimJsonValueString(Root, pszNodeName, strTmp)) return false;
nOut = atoll(strTmp.c_str());
return true;
}
相关文章推荐
- c#3.5关于JSON简单操作的实用帮助类(泛型实现)
- jsoncpp的读写操作
- c#3.0关于JSON简单操作的实用帮助类(泛型实现)
- JsonHelper 操作帮助类
- 【C#公共帮助类】JsonHelper 操作帮助类
- json cpp 的简单操作
- c++ jsoncpp操作
- C++使用JsonCpp库操作json格式数据示例
- JsonCpp操作数组对象
- c#3.5关于JSON简单操作的实用帮助类(泛型实现)
- JsonCpp操作数组对象
- jsoncpp文件操作
- jsoncpp文件操作
- Flex与JSON及XML的互操作
- 转摘 JQUERY操作JSON例子
- JS操作JSON
- 操作无法完成.键入的打印机名不正确,或者指定的打印机没有连接到服务器上.有关详细信息,请单帮助
- Jquery 局部刷新及 表单取值赋值 处理返回json数据 一些基本操作
- bo2-32.cpp 一个数组可生成若干静态链表(数据结构由c2-3.h定义)的基本操作(12个)
- JS操作JSON