精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
c++ json方面的开源库锐英源深入研究的有jsoncpp和rapidjson,但是最近新推出的nlohmann/json也很火,有个朋友在Ureal结合开发时,让我指导他用nlohmann/json写出json数组类型处理的代码,我用nlohmann/json结合for auto写出了代码。
在研究过程中,发现nlohmann/json在github上的代码比较难下载,国内gitee上下载很方便,但是gitee上的帮助文档也是英文的,大家有兴趣可以用翻译工具翻译下,帮助文档后面是nlohmann/json的要点,比如json指针和json补丁、json合并补丁、隐式转换、任意类型转换、宏、专业序列化和二进制格式,这些要点掌握了,表明C++水平就真正上去了,当然做应用级开发,可能这些要点也接触不到,这里提这些就是说大家要重视开源库的精髓,不要觉得json常用,开源库就简单,我看了nlohmann/json的代码,有的头文件将近100K,里面代码量还是很复杂的。nlohmann/json的复杂用法,如果不掌握,或者心里不能确定,请联系锐英源,有专业服务。
nlohmann/json的配套文档和示例代码齐全,有文档目录和示例代码目录,我在示例代码里找到了array.cpp,应该是处理数组的示例。
nlohmann/json是新推出的,所以在功能上有新意,新在有点动态语言的结合,比如正面的初始化,
auto j2 = R"( { "happy": true, "pi": 3.141 } )"_json;
一些刚毕业的学生估计不好理解,"" _json是操作符重载,这类形式的重载在老代码里比较少见,初学者如果C++没深入学,估计这种形式很难理解,C++面向对象里有操作符重载,是重要的章节,操作符重载的目的是让操作以更自然形式的来表现。上段代码就是自然表现,加了后缀就能转换成json对象,不需要再另起一行调用函数,更方便。
初始化后,使用nlohmann/json也很简单,用好[]取属性,转换结果成string用dump,整体解析和序列化可以用<<和>>操作符,nlohmann/json目标就是让用json更简单。
vs2019下使用nlohmann/json非常方便,在包含目录里加上nlohmann/json的目录,不用把nlohmann/json文件加到项目里,就可以直接编译使用。如果把nlohmann/json的目录直接拷贝到项目目录下,反而不好用,切记。
下面是数组代码示例:
json coor = jf["geometry"]["coordinates"]; for(auto& cf :coor)//或for循环 { string sx=cf[0].dump();//X坐标 string sy=cf[1].dump();//Y坐标 }