当前位置:网站首页>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": "泰山"}]
}
}
边栏推荐
- 通用分页框架
- Uber 前安全主管面临欺诈指控,曾隐瞒数据泄露事件
- Factory mode
- Data visualization: the significance of data visualization
- Deep Learning-based Automated Delineation of Head and Neck Malignant Lesions from PET Images
- Print service IP setting scheme
- Go deep into RC, RS, daemonset and statefulset (VII)
- Data warehouse: layered architecture of Finance / banking
- UE4 compile a single file (VS and editor start respectively)
- InvalidConnectionAttributeException异常处理
猜你喜欢

数据治理:数据标准管理(第三篇)

easyexecl导出100万行execl报字体错误的解决办法

Data governance: data standard management (Part III)

五心公益红红娘团队
![[Huawei certification] the most complete and selected question bank in hcia-datacom history (with answer analysis)](/img/d4/f5ea847573433f7ca7bd429f57e40a.png)
[Huawei certification] the most complete and selected question bank in hcia-datacom history (with answer analysis)

GD32F4xx 以太网芯片(enc28j60)驱动移植

长安链数据存储介绍及Mysql存储环境搭建

Self cultivation (XXI) servlet life cycle, service method source code analysis, thread safety issues

遍历vector容器中的对象的方式

How to set Google Chrome as the default browser
随机推荐
UE4 编译单个文件(VS与编辑器分别启动)
Data governance: Metadata Management (Part 2)
Uber 前安全主管面临欺诈指控,曾隐瞒数据泄露事件
Is it safe to open an account for stock speculation? Is it reliable?
Simplicity studio does not recognize the new JLINK V9 solution
User level threads and kernel level threads
監控數據源連接池使用情况
五心公益红红娘团队
[technology development] development and design of alcohol tester solution
Data visualization: the four quadrants of data visualization teach you to correctly apply icons
GD32F4xx 以太網芯片(enc28j60)驅動移植
通识篇:原型设计的认知,设计及最佳实践
Mac mysql数据库基本操作
通用分页框架
Segmentation of Head and Neck Tumours Using Modified U-net
数据治理:数据标准管理(第三篇)
# 《网络是怎么样连接的》读书笔记 - WEB服务端请求和响应(四)
programing language
遍历vector容器中的对象的方式
Cloud management platform: 9 open source cloud management platforms (CMP)