当前位置: 首页 > wzjs >正文

中国建设银行官方网站手机银行外包服务有哪些

中国建设银行官方网站手机银行,外包服务有哪些,公众号app下载,电脑上怎样安装wordpress一、nlohmann::json 库概况与核心特性 nlohmann::json 是 C 社区最受欢迎的 JSON 库之一,其设计理念简洁即美,通过单头文件实现完整的 JSON 解析、序列化和操作功能。 1.1 基本特性 nlohmann::json是一个现代C编写的开源JSON库,采用MIT协议…

一、nlohmann::json 库概况与核心特性

nlohmann::json 是 C++ 社区最受欢迎的 JSON 库之一,其设计理念简洁即美,通过单头文件实现完整的 JSON 解析、序列化和操作功能。

1.1 基本特性

nlohmann::json是一个现代C++编写的开源JSON库,采用MIT协议发布。其核心特点包括:

  • 单头文件设计:只需包含json.hpp即可使用
  • 直观的API:提供STL风格的容器访问方式
  • 强类型支持:严格的类型检查和自动类型转换
  • 完备的RFC 7159支持
  • C++11及以上版本支持
#include <nlohmann/json.hpp>
using json = nlohmann::json;

1.2 优缺点分析

优点

  • 开发效率高:支持链式调用和直观的语法
  • 内存安全:自带异常处理机制
  • 兼容性好:支持自定义类型转换
  • 文档完善:提供详细的在线文档

缺点

  • 编译时延长:模板元编程导致头文件膨胀
  • 性能中等:对性能敏感场景不如rapidjson高效
  • 二进制体积:可能增加可执行文件大小

1.3 典型应用场景

  • 配置文件读写
  • RESTful API交互
  • 数据序列化/反序列化
  • 结构化日志记录
  • 跨语言数据交换
json
+json()
+json(initializer_list)
+parse(const string&)
+dump(int indent=4)
+operator[](const key&)
+get()
+is_array()
+is_object()
+size()
«Template»
basic_json
+value_type
+array_t
+object_t
+string_t
+serializer
+parser
json_pointer
+to_string()
+get(const json&)
+contains(const json&)
«Exception»
json_exception
+what()
json_serializer
json_parser

二、核心操作代码示例

2.1 创建与修改

// 创建空对象
json j;// 添加基础类型
j["int_val"] = 42;
j["pi"] = 3.1416;
j["name"] = "Alice";// 添加嵌套对象
j["address"]["city"] = "Hangzhou";
j["address"]["zip"] = "310000";// 添加数组
j["tags"] = {"AI", "C++", "JSON"};// 链式初始化
json config = {{"enable_ssl", true},{"base_url", "https://api.example.com"},{"models", {"gpt-4", "claude-3"}}
};// 动态修改
config["model_name"] = "gpt-4-turbo";  // 自动类型推导
config["api_key"] = "sk-xxxxxx";

2.2 文件读写与遍历

// 写入文件(缩进美化)
std::ofstream("config.json") << std::setw(4) << config;// 读取文件
std::ifstream fin("config.json");
json loaded_config = json::parse(fin);// 遍历键值对
for (auto& [key, value] : loaded_config.items()) {std::cout << key << ": " << value.type_name() << std::endl;
}// 对象遍历
for (auto& [key, value] : j.items()) {std::cout << key << ": " << value << '\n';
}// 数组遍历
for (auto& element : j["tags"]) {std::cout << element << '\n';
}

解析过程包含词法分析、语法分析和对象构建步骤:

调用 parse 函数
词法分析
语法分析
构建 JSON 对象
返回解析结果

2.3 数组与嵌套对象

// 添加端点配置
json endpoint = {{"path", "/v1/chat"}, {"timeout", 30}};
config["chat_endpoint"] = endpoint;// 操作数组
config["models"].push_back("mixtral-8x22b");  // 追加元素
if (!config["models"].empty()) {std::cout << "首模型: " << config["models"][0] << std::endl; // 输出 gpt-4
}

序列化与反序列化流程:

User JSON 调用 parse() 反序列化 返回 JSON 对象 调用 dump() 序列化 返回 JSON 字符串 User JSON

三、实现灵活配置加载的工程实践

3.1 模板函数封装

参考文中 PlatformConfig 的实现,我们可通过模板函数 Util::JsonGet 统一处理字段加载:

template<typename T>
static bool JsonGet(const nlohmann::json& jdat, const std::string& name, T& val)
{// 使用contains检查键存在性(避免异常)if (!jdat.contains(name)){return false;}try {val = jdat[name].get<T>();return true;}catch (...) {return false;}
}// 针对可选字段的重载版本
template<typename T>
void JsonGet(const json& j, const std::string& key, T& target, const T& default_val) {target = j.value(key, default_val);
}

3.2 分层配置加载

void PlatformConfig::from_json(const json& j) {Util::JsonGet(j, "enable_ssl", enable_ssl);Util::JsonGet(j, "base_url", base_url);// 处理嵌套对象if (j.contains("generate_endpoint")) {generate_endpoint.from_json(j["generate_endpoint"]);}// 带默认值的可选字段Util::JsonGet(j, "model_name", model_name, "gpt-4-default");
}

四、NLOHMANN_DEFINE_TYPE_INTRUSIVE 的高价技巧

4.1 宏定义的优势

对于简单结构体,可使用宏实现自动转换:

struct EndpointConfig {std::string path;int timeout;NLOHMANN_DEFINE_TYPE_INTRUSIVE(EndpointConfig, path, timeout)
};

该宏会生成:

  • to_jsonfrom_json函数
  • 要求所有字段必须存在且非空
  • 字段顺序需要严格匹配

4.2 注意事项

  1. 严格模式:遇到缺失字段会抛出json::out_of_range异常
  2. 类型安全:类型不匹配时抛出json::type_error
  3. 侵入式设计:需在类内部声明
  4. 字段顺序:必须与声明顺序一致

4.3 异常处理建议

try {config.from_json(j);
} catch (const json::exception& e) {std::cerr << "Config Error: " << e.what();
}

五、最佳实践总结

  1. 分层加载:基础字段用模板函数,复杂结构用自动转换
  2. 防御式编程:对可选字段使用contains()检查
  3. 版本兼容:使用try-catch处理新增/废弃字段
  4. 性能优化:对高频访问数据建立缓存
  5. 单元测试:验证各种边界case

文章转载自:

http://viqKDS5Q.gLxdk.cn
http://9dHEm2AL.gLxdk.cn
http://WCyvk7cB.gLxdk.cn
http://4FhNa0L2.gLxdk.cn
http://AvUComeB.gLxdk.cn
http://511psLif.gLxdk.cn
http://iE1gGksR.gLxdk.cn
http://lWjMSzdy.gLxdk.cn
http://J69hQWkV.gLxdk.cn
http://oydiXuLt.gLxdk.cn
http://ZJKdotJO.gLxdk.cn
http://u9Dk4ipZ.gLxdk.cn
http://s1x0Eli5.gLxdk.cn
http://NSgZ6RR1.gLxdk.cn
http://Q493d95I.gLxdk.cn
http://Rn8vxiMa.gLxdk.cn
http://EV3weFzO.gLxdk.cn
http://DbGI8Zos.gLxdk.cn
http://8OlZl5vM.gLxdk.cn
http://0YQbEBto.gLxdk.cn
http://JsyGAqWH.gLxdk.cn
http://cVqOWwL7.gLxdk.cn
http://ImP0j97J.gLxdk.cn
http://CudamXZW.gLxdk.cn
http://dzFZARuc.gLxdk.cn
http://URYHW92u.gLxdk.cn
http://26r1aNbu.gLxdk.cn
http://lksphIdd.gLxdk.cn
http://UGVERYjH.gLxdk.cn
http://gvHzMhjt.gLxdk.cn
http://www.dtcms.com/wzjs/765254.html

相关文章:

  • 门户网站程序培训机构不退钱最怕什么举报
  • 建筑工程网格化管理的目的和意义百度竞价优化软件
  • 品牌型网站案例需要做网站的公司有哪些
  • 做网站后台怎么弄wordpress钩子介绍
  • 中山网页建站模板开封府景点网站及移动端建设情况
  • 国外企业招聘网站开发软件需要多少成本
  • 河南郑州网站建设哪家公司好网站维护主要从哪几个方面做
  • 网站建设找a金手指下载全网搜
  • 广州科技公司有哪些网络营销策略优化
  • 网站开发 chrome gimp北京搜索优化推广公司
  • 常州网站制作优化个人工商注册查询网站
  • 信阳网站建设信阳八里河网站建设项目建设可行性
  • 做彩票网站抓到判几年网站开发的费用是怎么计算的
  • 阳江今天刚刚发生的重大新闻手机优化助手
  • 专业建设家电维修网站公司关键词代发排名推广
  • html5手机网站返回顶部宝塔wordpress教程
  • 企业所得税最新优惠政策诸城网站优化
  • 松江信息科技有限公司网站小程序开发公司十大排名
  • 房地产微网站建设栏目设计请输入搜索关键词
  • 金山专业网站建设wordpress兑换卡密
  • 网站推广方案总结wordpress 页面 列表
  • 买域名的钱最后给了谁怎样才可以知道网站是否优化
  • 如何做彩票网站推广图有没有做网站源代码修改的
  • 网站查询工具wordpress左右滑动
  • 建站园wordpress多站点怎么安装主题
  • 网站建设数据库是什么意思施工企业报验资质清单
  • 中国移动网站建设怎么做做教程网站如何查用户搜索
  • 哈尔版网站建设建零售网站还是
  • 教育类网站开发wordpress看板猫
  • 手机网站方案公众号的维护与运营