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 ...
随机推荐
- sql server之SQL SELECT INTO 语句
SELECT INTO 语句可用于创建表的备份复件. SELECT INTO 语句 SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中. SELECT INTO 语句常用于创建表 ...
- 在Typora中使用Markdown
在Typora中使用Markdown 记:准备正式开始在博客园写博客,故学习Markdown语法,为写博客做好准备.以前也在CSDN写过一些,但广告太多,个人更喜欢博客园的简洁. 1. 标题 (#)标 ...
- 02.Django基础二之URL路由系统
一 URL配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这 ...
- Spring boot缓存初体验
spring boot缓存初体验 1.项目搭建 使用MySQL作为数据库,spring boot集成mybatis来操作数据库,所以在使用springboot的cache组件时,需要先搭建一个简单的s ...
- opencv图像处理之常见滤波器
图像平滑 Smoothing, also called blurring, is a simple and frequently used image processing operation. 平滑 ...
- SpringBoot官方文档学习(一)开发你的第一个Spring Boot应用
一些准备工作: 本节介绍如何开发一个简单的“ Hello World!” Web应用程序,该应用程序重点介绍Spring Boot的一些关键功能.我们使用Maven来构建该项目,因为大多数IDE都支持 ...
- Android蓝牙低功耗(BLE)模块设计
在阅读这篇文章之前你应该对GATT和Android蓝牙框架有一定的了解.这里不会向你解释Service.Characteristics等蓝牙知识.这里只是我写下我对Android Ble的再次封装来适 ...
- 阿里云服务器CentOS6.9 tomcat配置域名访问
之前一直是ip访问项目,今天申请到一个测试域名,想要用设置用域名访问项目. 1.进入阿里云服务器中,修改tomcat中server.xml文件 cd /usr/local/apache-tomcat/ ...
- Spring GetBean流程
第一节讲解Spring启动的时候说到,Spring内部先解析了所有的配置,加载所有的Bean定义后,再根据需要对Bean进行实例化和初始化.除开Spring自己主动新建的对象,第一次根据Bean定义 ...
- eShopOnContainers学习系列(二):数据库连接健康检查
项目里使用数据库的时候,我们有时候需要知道数据库当前的健康状态,特别是当数据库连接不上的时候能够立马获悉.eShopOnContainers里存在着大量的服务健康.连接健康的检查,数据库连接是其中之一 ...