# ParamDiffMergeByJsoncpp **Repository Path**: eliasfp/param-diff-merge-by-jsoncpp ## Basic Information - **Project Name**: ParamDiffMergeByJsoncpp - **Description**: 参数差异化合并 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-08-26 - **Last Updated**: 2024-08-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ########################################################### 参数差异合并 ########################################################### 前置条件: a. 该工程采用的是jsoncpp库,需要安装jsoncpp库,将编译的include和lib拷贝到./include和./lib中。 b. 该工程可以支持现代c++(C++11)以下的版本。故jsoncpp的大版本可以支持0.x.x的版本。 1. 编译: ./build.sh 2. 测试执行: ./run.sh 3. 客户参数差异文件以及使用说明 3.1 背景:基于在以前工作的公司之前做的一个项目参数合并优化案例,参数采用的json格式存储。 3.2 旧的参数合并方式: 由于参数文件有基础参数文件(以normal称),定制客户参数文件(以customer称)。 合并方式是: 1)如果有新需求需要加定制客户(以3922为例),定制客户在开发中有新的参数加入, 需从normal标准客户中拷贝相应的参数文件(以PARAM_DEFAULT_VALUE参数文件为例)到3922文件夹下, 再在该文件夹下的PARAM_DEFAULT_VALUE文件中增加客户新增参数。 2)合并过程是:打包拷贝方式为先将normal文件中的参数拷贝到3922客户的升级包中,如果3922的参数文件夹下有对应的参数文件, 则将该文件夹下的参数文件拷贝到3922客户升级包中进行覆盖。 3)合并过程存在一个问题:研发每次开发定制客户功能,需要添加新参数时,需先要将normal客户的参数同步到定制客户,然后再添加新参数。 目前我们的参数数量比较多,每次合并都会有时间消耗,同步起来非常麻烦。 3.3 新的参数合并方式: 1)合并方式:增量式合并。直接在服务器编译打包时进行自动合并。 3.4 定制客户差异参数文件编写要求: 1)Json文件格式一定要正确,不然无法解析出json数据; 2)如果添加参数为数组对象的元素(没有“key”,只有“value”的数组); *或者在原数组对象中增加一个元素,需要将原数组拷贝一份,然后再插入新的数组元素; *或者不需要修改的数组元素以’null’占位。推荐使用这种方法,因为该方法适合数组元素为任何的type(比如”TEST”: [{...}, {...}, {...}],如果要修改第三个{}里面的,写为”TEST”: [null, null, {...}]即可)。 3)如果添加参数为数组对象的元素,对于数组对象元素有“key”的数组元素,可以不用给出整个数组,直接添加或者修改需要添加或者修改的元素就行。 4.Q&A 4.1 新开客户增加参数? 新增客户增加参数目录与现有的目录结构保持一样,增加一个新客户目录,然后按照 3. 定制客户差异参数文件编写要求 编写参数文件即可。 5.注意:jsoncpp使用value.write函数中的valueToString函数写double参数时的精度问题,代码如下。为了保证浮点数的可靠性,凡是json配置文件中的浮点数,都转为字符串进行保存。