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

秦皇岛网站搜索优化会计网站模板

秦皇岛网站搜索优化,会计网站模板,推进网站集约化建设的做法,网站推广活动用 JSON 保存后台配置数据 在前台数据交换中#xff0c;优其 web应用领域#xff0c;JSON以其简单性和可扩展性“大有替代”xml 之势#xff08;夸张地说#xff09;。本文简单介绍了 json 作为配置的存取在后台操作的便利性#xff0c;希望本文能抛砖引玉#xff0c;让J…用 JSON 保存后台配置数据 在前台数据交换中优其 web应用领域JSON以其简单性和可扩展性“大有替代”xml 之势夸张地说。本文简单介绍了 json 作为配置的存取在后台操作的便利性希望本文能抛砖引玉让JSON给大家后台配置存取提供更多便利。 编辑器: JSON 在线编辑器 JsonEditor V1.03.2 在一些中/小型应用程序中配置文件是必须的。采用什么格式的配置文件一直困扰着很多开发人员。实践中常用的有四种类型1 采用 c/c 的结构体存储。 虽然很原始便还是在很多场景可以看到原因是免解析。缺点太多了比如不易扩展可读性差。 2采用 名称 值 的行存储或类似 windows 系统 ini 文件的格式。 通过 xxx_set/xxx_get 的方法进行存取. 在各种应用中都很常见优其小型嵌入式设备上很多时候配置采用类似的方法。 3采用相对复杂的分段/分级配置。 如 Apache/Ngix 等的配置文件再如 cisco 的 consle 配置。优点时文本方式便于编辑有良好的结构性。 缺点解析起来相对复杂需要为应用定制配置格式。 4采用 xml 格式保存配置。 在大型应用优其 java.net 的项目中应用的优其多。原因是平台或操作语言提供了 xml 的操作 API。 在小型 c/c 程序中 如果你有 DOM/XML 的操作 API 依然是是可行的。 最近在一些小型项目的实践中 保存配置文件我是越来越倾向于使用 JSON 了。原因是 1 JSON 像 XML  一样有的良好结构性。 2 JSON 固有的数据类型 object/string/number/true/false 意义明确便于表达. 3 JSON 语法简单解析器易实现同时便于解析和格式化输出。JSON的官方站点上有各种语言的解析器 4 配置层次性好最近又修改了一个开源 JSON 树型 编辑器。用工具编辑配置文件感觉很省事。 说了这多 还未到正文。下来用示例来说明下吧。后文件示例以 c 代码作为伪代码展示。假设你已经有如下 JSON 的操作 API 如果没有可以很容易自己实现封装 1)  json_t   /*json 类型 */ 2)  json_t * json_parse_string(const char * json_string);   /* 解析 json 树 */3)  const char * json_get_name(json_t * json, const char * path); /* 获取节点名 */4)  const char * json_get_str(json_t * json, const char * path); /* 获取节点值string  类型 */5)  const char * json_get_int(json_t * json, const char * path); /* 获取节点值int 类型 */6) FOREACH_IN_JSON_CHILD(json, path, pchild) /* 宏用于遍历子节点 */ 以下为假想配置示例: { Root:F:/website/doc, Connection:{ maxconnects:1500, maxkeepalive:0, keeptimeout:15, }, Listen:[{ ip:0.0.0.0, port:8088, protocol:http, maxlisten:100 }, { ip:127.0.0.1, port:8090, protocol:http, maxlisten:100 }], Directory:{ /app/:{ path:F:/website/doc, RewriteRule:[{ from:, to:{} }, { from:, to:{} }] }, /libso/:{ path:E:/eybuild/lib6/app/, RewriteRule:[{ from:, to:{} }, { from:, to:{} }] }, } }, DAction:[ /libso/*.so, /libso/*.dll, /dll/*.dll], SAction:[ /app/**, /bbr/, /cplus/], Log:{ Logfile:c:/log/log.log, Loglevel:5 } } 1 加载配置文件解析成 JSON 树. readfile(conf_buf, from_file);     /*加载配置 */ json_t * jcon json_parse_string(conf_buf); 2遍历第一层配置。 json_t *  jobj; FOREACH_IN_JSON_CHILD(jconf, , jobj) { const char * pname json_get_name(jobj)); const char * pvalue json_get_str(jobj); if (compare(Root, pname)) call_xxx_set_root(); /* 把值传给处理函数 */ else if (compare(Connection, pname)) call_xxx_set_connection(); /* 把值传给处理函数 */ else if (compare(Listen, pname)) call_xxx_set_listen(jobj); /* 把值传给处理函数 */ ....  /* 其它节点 */ } 3对子节点进行处理以 Listen 数组下的结点为例。 从上面我们可以看到 Listen是个数组其下的节点数目是不确定的依然使用 foreach 的形式进行遍历. int call_xxx_set_lisen(json_t * jconf) { json_t *  jobj; /* 从数组中取出一个节点 */ FOREACH_IN_JSON_CHILD(jconf, , jobj) { /* 对数组中的每一个原素 */ const char * ip json_get_name(jobj, ip)); short int  port  json_get_int(jobj, port); ....  /* 这里加上应用该配置的函数 */ } } 4其它节点类似。 附示例代码: static int load_conf_listen(EGHTTPD * phttpd, EBJSON * jconf) { EBJSON * jobj NULL; EBJSON_FOREACH(jconf, Listen, jobj) { const char * ip ebJSONGetString(jobj, ip); const short port ebJSONGetInt( jobj, port); const char * protocol ebJSONGetString(jobj, protocol); const int maxlisten ebJSONGetInt( jobj, maxlisten); BOOL blhttps; JSON_IGNORE_EMPTY_OBJ(jobj); blhttps !strcmp(protocol, https); if (NULL egHttpdAddListener(phttpd, ip, port, maxlisten, blhttps)) { egHttpdLog(LOGLEVEL_ERROR, Add listener(%s: %hu: %s: %d) error!/n, ip, port, protocol, maxlisten); return ERROR; } egHttpdLog(LOGLEVEL_DEBUG, %s: %hu: %s: %d/n, ip, port, protocol, maxlisten); } return OK; } static int load_conf_directory(EGHTTPD * phttpd, EBJSON * jconf) { EBJSON * jobj NULL; EBJSON * jval NULL; EBJSON_FOREACH(jconf, Directory, jobj) { const char * vpath ebJSONGetName(jobj); const char * rpath ebJSONGetString(jobj, path); JSON_IGNORE_EMPTY_OBJ(jobj); egHttpdLog(LOGLEVEL_DEBUG, %s: %s/n, vpath, rpath); if (!strissp(vpath) !strissp(rpath)) { int i 0; if (OK ! egHttpdAddVirtualPath(phttpd, vpath, rpath)) { egHttpdLog(LOGLEVEL_DEBUG, Add virtual path (%s) error!/n, vpath); return ERROR; } EBJSON_FOREACH(jobj, RewriteRule, jval) { const char * from ebJSONGetString(jval, from); const char * to ebJSONGetString(jval, to); egHttpdLog(LOGLEVEL_DEBUG, Rule%d: %s %s/n, i, from, to); JSON_IGNORE_EMPTY_OBJ(jobj); if (!strissp(from) !strissp(to)) { if (OK ! egHttpdAddRewriteRule(phttpd, vpath, from, to)) { egHttpdLog(LOGLEVEL_ERROR, Set rewrite rule error: %s: %s %s/n, vpath, from, to); return ERROR; } } } } } return OK; }   小结 JSON 的如下特性决定了 json 非常适合配置存储 1 JSON 具有良好的树型结构便于程序操作。 2 JSON 对像的值可以是一个普通对象也可以是一个“集合”或数组使用FOREACH_IN_JSON_CHILD()的形式对子节点遍历。 3 JSON 对象便于序列化成 string 存储/传递. 4 JSON 便于解析/格式化 5 因为天太晚了该睡了此处略去 nK 字吧, 呵呵
http://www.sczhlp.com/news/242307/

相关文章:

  • 2025.10.28
  • 价值主体的技术实现:基于Free Transformer潜变量Z的AI元人文架构探索
  • pyqt 自定义QTableWidget
  • 收费底的网站有吗管理系统的主要内容
  • 沭阳网站建设shy1z苏州设计工作室
  • 建设网站的公司济南兴田德润o评价百度热搜风云榜
  • 给网站公司做网站产品外观设计流程
  • 不用花生壳做网站服务器北京建设大厦
  • 机关单位不得建设网站知名的教育行业网站开发
  • 辉县网站建设网站建设公司 lnmp
  • 网站移动版怎么做深圳宝安高端网站建设公司
  • 厦门网站排名优化软件网站建设解决恩问题
  • 用自己电脑做网站网站关键词优化外包
  • 没有网站做淘宝客制作简单的网页代码
  • 大连建设执业资格注册中心网站网站 用户粘度
  • 揭阳门户网站开发joomla 网站模板
  • 建设商务网站的理由wordpress个人建站教程
  • 长春网站设计长春网络推广工程公司税率是多少
  • 黎平网站建设太原手机微网站建设
  • 营销型网站开发公司百度新闻客户端
  • word网站的链接怎么做万网虚拟主机建网站
  • 专业建筑公司网站网推软件有哪些
  • 建设银行 上海科技中心网站动漫制作专业贵州有哪些大专院校
  • 文字做图网站网站外链平台
  • 公司建设网站的费用可以做视频的一个网站
  • 绵阳优化网站排名网站丢失了怎么办
  • 网站做好后还需要维护吗vps如何做网站步骤
  • 移动互联网站开发做机械比较好的外贸网站
  • 网站建设做的好编写一个android应用程序
  • Unity3D URP中材质设置emission自发光但是没有辉光Bloom效果