jsoncpp

JsonCpp 的使用

强颜欢笑 提交于 2021-02-12 22:44:19
JSON全称为JavaScript ObjectNotation,它是一种轻量级的数据交换格式,易于阅读、编写、解析。jsoncpp是c++解析JSON串常用的解析库之一。 jsoncpp中主要的类: Json::Value:可以表示所有支持的类型,如:int , double ,string , object, array等。其包含节点的类型判断(isNull,isBool,isInt,isArray,isMember,isValidIndex等),类型获取(type),类型转换(asInt,asString等),节点获取(get,[]),节点比较(重载<,<=,>,>=,==,!=),节点操作(compare,swap,removeMember,removeindex,append等)等函数。 Json::Reader:将文件流或字符串创解析到Json::Value中,主要使用parse函数。Json::Reader的构造函数还允许用户使用特性Features来自定义Json的严格等级。 Json::Writer:与JsonReader相反,将Json::Value转换成字符串流等,Writer类是一个纯虚类,并不能直接使用。在此我们使用 Json::Writer 的子类:Json::FastWriter(将数据写入一行,没有格式),Json::StyledWriter

jsoncpp 安装入门

情到浓时终转凉″ 提交于 2020-09-28 16:49:59
安装 使用cmake安装 cd jsoncpp-1.8.0 mkdir -p build/debug cd build/debug cmake -DCMAKE_BUILD_TYPE=release -DBUILD_STATIC_LIBS=OFF -DBUILD_SHARED_LIBS=ON -DARCHIVE_INSTALL_DIR=. -DCMAKE_INSTALL_INCLUDEDIR=include -G "Unix Makefiles" ../.. 执行完后会生成一个Makefile,接着执行make && make install即可。 包含头文件的json文件夹位于/usr/local/include目录,库文件位于/usr/local/lib64目录。 最后打开/etc/profile,添加以下内容: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64 export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib64 保存,再来一句: source /etc/profile,修改立即生效。 安装结束。 使用 sample code如下 #include <iostream> #include <string> #include "json/json.h" int main

jsoncpp使用小结

坚强是说给别人听的谎言 提交于 2020-08-14 04:02:09
一、jsoncpp介绍 jsoncpp是一个开源C++库,提供对JSON字符串序列化/反序列化的功能。 开源地址: https://github.com/open-source-parsers/jsoncpp 文档地址: http://open-source-parsers.github.io/jsoncpp-docs/doxygen/index.html 二、jsoncpp的使用 jsoncpp主要包含三种类型的C++类 - value、reader、writer。value表示json对象和数组。reader用于反序列化json字符串。writer用于序列化json字符串。简单使用示例: 示例1:生成json Json::Value jsonRoot; //定义根节点 Json::Value jsonItem; //定义一个子对象 jsonItem["item1"] = "one"; //添加数据 jsonItem["item2"] = 2; jsonRoot.append(jsonItem); jsonItem.clear(); //清除jsonItemjsonItem["item1.0"] = 1.0; jsonItem["item2.0"] = 2.0; jsonRoot["item"] = jsonItem; std::string strJson = jsonRoot

利用jsoncpp进行创建JSON

萝らか妹 提交于 2020-08-12 14:58:09
一、基本概念 1、定义 官方对JSON格式的定义: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。 JSON最初的来源于JavaScript这门语言,随着被广泛使用,几乎每门开发语言都有处理JSON的API。常常被用作数据交互的两种交互格式是json和xml,我之前也使用过一个叫mini-XML的库进行xml文件的解析,但是使用起来并没有jsoncpp这么容易上手。 json的官网: http://www.json.org/json-zh.html ,在官网有对json的基本介绍,并且提供了不同语言支持json的库的列表,可根据自己的实际情况进行调用。 2、语法规则 JSON有2种结构形式,以键值对形式或数组形式,官网关于这两种结构的描述如下: “名称/值”对的集合(A collection of name

C++ 轻量级对象JSON序列化实现

旧时模样 提交于 2020-08-07 13:09:17
背景: 在项目里经常遇到对象和json字符串的相互转换这类问题,在大多数程序里,一般这个问题都比较有比较好的解决方法,往往一个函数搞定。但是到了c++这边却需要我们手撸json库一个一个字段初始化/序列化。如果这时候有一个函数 可以一行代码 unmarshal /marshal 对象岂不是很方便?本文以jsoncpp库为基础,设计这样一个可以支持这种功能的函数,下面进入正题~ 设计思路 以unmarshal 为例,我们最终的函数是打造两个这样的模板函数 : 一个从string 的josn直接反序列化对象,一个从jsoncpp库的json对象,反序列化对象。 template<typename T> bool Unmarshal(T& obj,const string& json_str); template<typename T> bool Unmarshal(T& obj,const Json::Value& json_obj_root); 由于json是具有自递归结构的,所以在设计时,应该也是以递归的方式解决复杂的组合类,我们可以简单的把程序中的变量分为下面几类: 这样我们只需要把这几个场景的 Unmarshal实现了,整体的Unmarshal也就实现了。模板设计的类图应该和我们的分类相对应: 在实现中要注意以下几点: 1、每个分类的Unmarshal模板具有排他性

Mac OS X下使用C++ JSON库

六月ゝ 毕业季﹏ 提交于 2020-05-08 00:21:21
1. 下载C++ JSON库 http://sourceforge.net/projects/jsoncpp/files/ 2. 下载scons http://sourceforge.net/projects/scons/files/scons/2.1.0/scons-2.1.0.tar.gz/download 3. 解压scons-2.1.0.tar.gz tar -zvxf scons-2.1.0.tar.gz 4. 进入到解压目录scons-2.1.0下面,执行命令: sudo python setup.py install 5. 解压jsconcpp tar -zvxf jsoncpp-src-0.5.0.tar.gz 6. 进入到jsoncpp解压目录下,执行命令: sudo scons platform=linux-gcc 7. 可以将/jsoncpp-src-0.5.0/include/目录下的json文件夹拷贝到/usr/include/,将jsoncpp-src-0.5.0/libs/linux-gcc-4.9.1/目录下的libjson_linux-gcc-4.9.1_libmt.a 拷贝到/usr/local/lib/下,并为了方便使用,将其重命名为libjson.a。或者在g++编译时手动添加。 8. 测试代码: 1 #include <iostream>

Reading json files in C++

廉价感情. 提交于 2020-03-17 05:50:05
问题 I'm trying to read in a JSON file. So far I have focused on using the jsoncpp library. However, the documentation is quite hard to understand for me. Could anyone explain in lay terms what it does? Say I have a people.json which looks like this: {"Anna" : { "age": 18, "profession": "student"}, "Ben" : { "age" : "nineteen", "profession": "mechanic"} } What happens when I read this in? Can I create some sort of data structure people which I can index by Anna and Ben as well as age and

c++项目加入JsonCpp解析json

无人久伴 提交于 2020-03-02 12:15:15
1.去github下载jsonCpp jSONCpp地址 2.下载之后如图 3.执行python 脚本生成dist文件 4.将dist导入到c++项目中使用 5.具体使用方法 #include "json/json.h" #include "json-forwards.h" using namespace std; Json::Value json; Json::CharReaderBuilder builder; std::stringstream stream(strData); std::string errs; if (!Json::parseFromStream(builder, stream, &json, &errs)) { AfxMessageBox(_T("解析错误")); }else { std::string rescode = json.get("rescode", "UTF-8").asString(); std::string msg = json.get("msg", "UTF-8").asString(); std::cout << rescode << std::endl; if (rescode == "200") { const Json::Value dataDic = json["data"]; std::string liveIdTmp

json简介及JsonCpp用法

风流意气都作罢 提交于 2020-02-18 14:34:17
[时间:2017-04] [状态:Open] [关键词:数据交换格式,json,jsoncpp,c++,json解析,OpenSource] json简介 本文仅仅是添加我个人对json格式的理解,更详细的格式建议参考 官网的JSON介绍 及标准文档。 json中仅支持两种结构: name->value键值对(pair)的集合,一般称为对象(object)。 值的有序表,一般称为数组(array)。 1. pair 先从键值对(pair)开始,一个pair的通常结构是: string : value 键值之间的对应关系使用 : 表示,左边的为name,右边的为value。 一般key使用字符串,当然也可以使用数字,但是不推荐。 value的取值就比较随便,可以是任何任何json支持的类型(比如object,array,string,number,true/false,null等)。 2. object object可以认为是多个pair的集合,官网上给出的示意图如下: 其语法是以 { 作为object开始,以 } 作为object结束,不同的pair之间使用 , 分割。 需要说明的是object中的数据存储是无序的。 下面是一个比较典型的object构成 { "name" : "tocy", "age" : 1000 } 3. array array是value的有序集合

jsoncpp用法简述

一笑奈何 提交于 2020-02-18 14:33:46
Jsoncpp 是一个使用 C++ 语言实现的面向对象的 json 库。 Jsoncpp 提供的接口中有 3 个核心类: Reader 、 Writer 、 Value。 Reader 类负责从字符串或者输入流中加载 JSON 文档,并进行解析,生成代表 JSON 文 档的 Value 对象。 Writer 类负责将内存中的 Value 对象转换成 JSON 文档,可输出到文件或者是字符串中。 Value 类的对象代表一个 JSON 值,既可以代表一个文档,也可以代表文档中一个值。 一个 JSON 文档的大致过程如下: //准备Json源数据,如 读取文档:Std::string strdoc = readFromFile(… ); 。。。 // 生命顶级 Value 对象 Json::Value root; // 声明 Reader 对象 Json::Reader _reader; // 解析 json 文档 _reader.paser(strdoc, root); Json::ValueType有8种,以下是定义。 enum Json::ValueType Enumerator: nullValue    'null' value intValue     signed integer value uintValue    unsigned integer value