json::rapidjson工具
源码地址: https://github.com/Tencent/rapidjson
可跨平台使用。
将 rapidjson-master\include\rapidjson 中的 rapidjson 文件夹添加到 项目中 即可。
#pragma once
#include <type_traits>
#include <rapidjson/error/en.h>
#include <rapidjson/document.h>
#include <rapidjson/stringbuffer.h>
#include <rapidjson/prettywriter.h>
#include <rapidjson/reader.h>
#include <rapidjson/error/en.h> #ifndef _WIN32
template<bool _Test,
class _Ty = void>
using enable_if_t = typename std::enable_if<_Test, _Ty>::type;
#else
using std::enable_if_t;
#endif template<typename T>
enable_if_t<(std::is_same<std::string, T>::value || std::is_same<const char*, T>::value), bool>
safe_get_json_val(const rapidjson::Value& v, T& r)
{
if (!v.IsString())
return false; r = v.Get<T>();
return true;
} template<typename T>
enable_if_t<std::is_same<int, T>::value, bool>
safe_get_json_val(const rapidjson::Value& v, T& r)
{
if (!v.IsInt())
return false; r = v.Get<T>();
return true;
} template<typename T>
enable_if_t<std::is_same<int64_t, T>::value, bool>
safe_get_json_val(const rapidjson::Value& v, T& r)
{
if (!v.IsInt64())
return false; r = v.Get<T>();
return true;
} template<typename T>
enable_if_t<std::is_same<uint32_t, T>::value, bool>
safe_get_json_val(const rapidjson::Value& v, T& r)
{
if (!v.IsUint())
return false; r = v.Get<T>();
return true;
} template<typename T>
enable_if_t<std::is_same<uint16_t, T>::value, bool>
safe_get_json_val(const rapidjson::Value& v, T& r)
{
if (!v.IsUint())
return false; r = v.Get<uint32_t>();
return true;
} template<typename T>
enable_if_t<std::is_same<int16_t, T>::value, bool>
safe_get_json_val(const rapidjson::Value& v, T& r)
{
if (!v.IsInt())
return false; r = v.Get<int>();
return true;
} template<typename T>
enable_if_t<std::is_same<uint64_t, T>::value, bool>
safe_get_json_val(const rapidjson::Value& v, T& r)
{
if (!v.IsUint64())
return false; r = v.Get<T>();
return true;
} template<typename T>
enable_if_t<std::is_same<double, T>::value, bool>
safe_get_json_val(const rapidjson::Value& v, T& r)
{
if (!v.IsDouble())
return false; r = v.Get<T>();
return true;
} template<typename T>
enable_if_t<std::is_same<float, T>::value, bool>
safe_get_json_val(const rapidjson::Value& v, T& r)
{
if (!v.IsFloat())
return false; r = v.Get<T>();
return true;
} template<typename T>
enable_if_t<std::is_same<rapidjson::Value::Object, T>::value, bool>
safe_get_json_val(const rapidjson::Value& v, T& r)
{
if (!v.IsObject())
return false; r = v.Get<T>();
return true;
} template<typename T>
enable_if_t<std::is_same<rapidjson::Value*, T>::value, bool>
safe_get_json_val(rapidjson::Value& v, T& r)
{
r = &v;
return true;
} template<typename T>
enable_if_t<std::is_same<rapidjson::Value::Array, T>::value, bool>
safe_get_json_val(const rapidjson::Value& v, T& r)
{
if (!v.IsArray())
return false; r = v.Get<T>();
return true;
} template<typename T>
bool safe_get_json_member(rapidjson::Value& v, const char* field, T& r)
{
if (!v.HasMember(field))
return false; return safe_get_json_val(v[field], r);
}
std::string Json2str()
{
std::lock_guard<mutex> lck(m_mx);
Document doc;
doc.SetObject(); Document::AllocatorType& allocator = doc.GetAllocator(); Value base(rapidjson::kObjectType); base.AddMember("SnapPicturePath", StringRef(m_bc.SnapPicturePath.c_str()), allocator);
base.AddMember("vehThreadNum", StringRef(m_bc.vehThreadNum.c_str()), allocator);
base.AddMember("vehUrl", StringRef(m_bc.vehUrl.c_str()), allocator);
base.AddMember("cmsUrl", StringRef(m_bc.cmsUrl.c_str()), allocator); doc.AddMember("base", base, allocator);
rapidjson::StringBuffer buffer;
rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buffer);
doc.Accept(writer); return buffer.GetString();
}
bool str2json(const string str, string& outHexImage, string& confidence)
{
Document doc;
doc.Parse<>(json.c_str());
if (doc.HasParseError()) {
return false;
} Value* pValue = nullptr;
Value* Value = nullptr;
if (safe_get_json_member(doc, "result", pValue))
{
if(safe_get_json_member(*pValue, "image", Value))
outHexImage = Value->GetString();
if(safe_get_json_member(*pValue, "confidence", Value))
confidence = Value->GetString();
}
return true;
}
json::rapidjson工具的更多相关文章
- Json解析工具Jackson(使用注解)
原文http://blog.csdn.net/nomousewch/article/details/8955796 接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给 ...
- Android进阶笔记17:3种JSON解析工具(org.json、fastjson、gson)
一. 目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),其中解析速度最快的是Gson. 3种json工具下 ...
- 在线的JSON formate工具
一个非常好的json formate工具 可以很容易发现json的错误,以及对json进行格式化 https://jsonformatter.curiousconcept.com/
- json 帮助工具
import java.lang.reflect.Type; import com.google.gson.Gson; /** * json 帮助工具 */public final class Gso ...
- JSON 解析工具的封装(Java)
JSON 解析工具的封装(Java) 一直想有一个属于自己的JSON工具,今天终于弄好了..... 1.添加pom依赖包 <!--json解析--> <dependency> ...
- 自定义Json解析工具
此博客为博主原创文章,转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10689536.html fastjson是很好用的json解析工具,只可惜项目中要 ...
- java后台常用json解析工具问题小结
若排版紊乱可查看我的个人博客原文地址 java后台常用json解析工具问题小结 这里不细究造成这些问题的底层原因,只是单纯的描述我碰到的问题及对应的解决方法 jackson将java对象转json字符 ...
- Json转换工具
import java.util.List; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterx ...
- Json转换工具类(基于google的Gson和阿里的fastjson)
在项目之中我们经常会涉及到字符串和各种对象的转换,为此特地整理了一下常用的转换方法 一.基于com.google.code.gson封装的json转换工具类 1. 在pom.xml文件里面引入gson ...
随机推荐
- 装系统 ---------- 了解 UEFI与Legacy、硬盘分区MBR和GPT
UEFI:全称“统一的可扩展固件接口”(Unified Extensible Firmware Interface),一种详细描述类型接口的标准.这种接口用于操作系统自动从预启动的操作环境,加载到一种 ...
- Linux 笔记 - 第五章 Linux 用户与用户组管理
博客地址:http://www.moonxy.com Linux 是一个多用户的操作系统,在日常的使用中,从安全角度考虑,应该尽量避免直接使用 root 用户登录,而使用普通用户. 1. 关于用户 u ...
- Java中创建对象的5种方法
将会列举5种方法去创建 Java 对象,以及他们如何与构造函数交互,并且会有介绍如何去使用这些方法的示例. 作为一个 Java 开发人员,我们每天都会创建大量的 Java 对象,但是我们通常会使用依赖 ...
- ActiveMQ JMX使用
一.说明 ActiveMQ使用过程中,可以使用自带的控制台进行相关的操作以及查看,但是当队列数相当多的时候,在查询以及整体的监控上,就可能相当的不便.所以可通过JMX的方式,进行MQ中队列相关指标的以 ...
- LoadRuuner资源监控
用ipconfig命令查看IP地址的具体方法.初级工程师面试常面临的问题:网址:http://url.cn/5BaDWvB本机IP:172.0.0.1localhostipconfig命令c查看本机I ...
- BUG 的生命周期
BUG 的生命周期 Bug-->软件程序的漏洞或缺陷 Bug 的类型:代码错误.设计缺陷.界面优化.性能问题.配置相关.安装部署.安全相关.标准规划.测试脚本....其他(功能类.界面类.性能类 ...
- LoadRunner11.安装破解
Loadrunner安装及破解 一. 安装 1. 将ISO文件导入,打开光驱,运行“setup.exe” 2. 点击安装,部分机器会提示缺少“Microsoft Visual C++ 2005 S ...
- Linux 伪终端(pty)
通过<Linux 终端(TTY)>一文我们了解到:我们常说的终端分为终端 tty1-6 和伪终端.使用 tty1-6 的情况一般为 Linux 系统直接连了键盘和显示器,或者是使用了 vS ...
- RDD转换为DataFrame【反射/编程】
写在前面 主要是加载文件为RDD,再把RDD转换为DataFrame,进而使用DataFrame的API或Sql进行数据的方便操作 简单理解:DataFrame=RDD+Schema 贴代码 pack ...
- 先森林后树木:Elasticsearch各版本升级核心内容必看
在学习Elasticsearch 时候,因为各个版本的问题,搞不清,非常的头疼,官方也给出了各个版本更新的情况,不过是英文版本,版本更新信息又特别多,最近学习,看了很多资料,没有一个整理很清楚的,然后 ...