当前位置:网站首页>2020-09-29 非商品模板化代码层次 rapidjson库
2020-09-29 非商品模板化代码层次 rapidjson库
2022-06-29 09:10:00 【qqq2018】
业务
'''
MatBuilderBase:
Build() //调用FillMat()填写JSON.
FillMat()=0
XXXBuilder:MatBuilderBase //六种非商品的Builder类对纯虚函数FillMat()做实现.
FillMat(){
xxx}
NowareMatHelper:
GetBuilder(AD_TYPE_ACTIVITY){
return xxxBuilder} //根据AD_TYPE_ACTIVITY选择使用对应的builder,对应的builder会写对应的JSON
Init()
GetMatByType() //根据广告类型给模板或不给
UseMat() //判断某广告类型用不用模板
mat_ctrl_ //读取的哪些广告位用模板的配置字符串
noware和general的WriteBidResponse()调用父类的RecommendRequestHandler::WriteBidResponse()
做的事是初始化了NowareMatHelper的mat_ctrl_,从词表中读取的哪些广告位用模板的配置字符串
'''
rapidjson库
腾讯搞的headeronly的库,又小又快(竟然是褒义hh)又不依赖别的库。
简单用法是JSON->DOM->对DOM进行修改->写回JSON
(看起来意思是不能直接修改JSON)
// rapidjson/example/simpledom/simpledom.cpp`
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>
using namespace rapidjson;
int main() {
// 1. 把 JSON 解析至 DOM。
const char* json = "{\"project\":\"rapidjson\",\"stars\":10}";
Document d;
d.Parse(json);
// 2. 利用 DOM 作出修改。
Value& s = d["stars"];
s.SetInt(s.GetInt() + 1);
// 3. 把 DOM 转换(stringify)成 JSON。
StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
d.Accept(writer);
// Output {"project":"rapidjson","stars":11}
std::cout << buffer.GetString() << std::endl;
return 0;
}

std::string()构造函数
之string(const char *s, size_type n, const Allocator &a = Allocator());
生成的是s的前n个字符组成的字符串,s不够长会拿内存中字符串位置后的随机值扩充。
附录1 rapidjson写json
rapidjson::StringBuffer buf;
//rapidjson::Writer<rapidjson::StringBuffer> writer(buf);
rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buf); // it can word wrap
writer.StartObject();
writer.Key("name"); writer.String("spring");
writer.Key("address"); writer.String("北京");
writer.Key("age"); writer.Int(30);
writer.Key("value1");
writer.StartArray();
writer.StartArray();
writer.StartObject();
writer.Key("name"); writer.String("spring");
writer.Key("address"); writer.String("北京");
writer.Key("age"); writer.Int(30);
writer.Key("value1");
writer.StartArray();
writer.StartArray();
writer.Double(23); writer.Double(43); writer.Double(-2.3); writer.Double(6.7);
writer.Double(90);
writer.EndArray();
writer.StartArray();
writer.Int(-9); writer.Int(-19); writer.Int(10); writer.Int(2);
writer.EndArray();
writer.StartArray();
writer.Int(-5); writer.Int(-55);
writer.EndArray();
writer.EndArray();
writer.Key("value2");
writer.StartArray();
writer.Double(13.3); writer.Double(1.9); writer.Double(2.10);
writer.EndArray();
writer.Key("bei_jing");
writer.StartObject();
writer.Key("address"); writer.String("海淀");
writer.Key("car"); writer.Bool(false);
writer.Key("cat"); writer.Bool(true);
writer.EndObject();
writer.Key("shan_dong");
writer.StartObject();
writer.Key("address"); writer.String("济南");
writer.Key("value1");
writer.StartArray();
writer.Key("ji_nan"); writer.String("趵突泉");
writer.Key("tai_an"); writer.String("泰山");
writer.EndArray();
writer.EndObject();
结果
{
"name": "spring",
"address": "北京",
"age": 30,
"value1": [[23, 43, -2.3, 6.7, 90],
[-9, -19, 10, 2],
[-5, -55]],
"value2": [13.3, 1.9, 2.10],
"bei_jing": {
"address": "海淀",
"car": false,
"cat": true
},
"shan_dong": {
"address": "济南",
"value1": [{"ji_nan": "趵突泉"}, {"tai_an": "泰山"}]
}
}
边栏推荐
- Data visualization: the significance of data visualization
- Self cultivation (XXI) servlet life cycle, service method source code analysis, thread safety issues
- 监控数据源连接池使用情况
- 遍历vector容器中的对象的方式
- Fabrication d'une calculatrice d'addition simple basée sur pyqt5 et Qt Designer
- A comparison of methods for fully automatic segmentation of tumors and involved nodes in PET/CT of h
- MySQL configuring master-slave databases
- 基于keil5自动配置stm32f103标准库的官网freertos移植
- 数据可视化:数据可视化的意义
- Pytorch Summary - Automatic gradient
猜你喜欢

Five heart charity matchmaker team

Segmentation of Head and Neck Tumours Using Modified U-net

Mysql配置主从数据库

1.4 regression of machine learning methods

你知道BFD是什么吗?一文详解BFD协议原理及使用场景

Gd32f4xx Ethernet Chip (ENC28J60) Drive transplantation

用户级线程和内核级线程

zabbix4.4配置监控服务器指标,以及图形页乱码解决

Custom MVC framework implementation

转载 :判断对象是否具有属性的5种方法
随机推荐
【华为认证】HCIA-DATACOM史上最全精选题库(附答案解析)
数据可视化:数据可视化四象限,教你正确应用图标
数据治理:数据标准管理(第三篇)
CROSSFORMER: A VERSATILE VISION TRANSFORMER BASED ON CROSS-SCALE ATTENTION
Leetcode skimming -- teponacci sequence
监控数据源连接池使用情况
爱快安装或重置后,PC或手机端获取不到ip
Set up lamp environment under cenos7
Data governance: Metadata Management (Part 2)
通用分页框架
基于PyQt5和Qt Designer的简易加法计算器的制作
Student addition / deletion gaih
Custom MVC framework implementation
Hystrix熔断器:服务熔断与服务降级
SPI drive of lsm6dsl
UE4 材质UV纹理不随模型缩放拉伸
UE4 编译单个文件(VS与编辑器分别启动)
官方stm32芯片包下载地址 stm32f10x stm32f40x下载
Pytorch Summary - Automatic gradient
Automatic 3D Detection and Segmentation of Head and Neck Cancer from MRI Data.