最新版 JsonCpp 的下载、编译、及使用

Json

  1. 概念
    Json 是一种基于文本的、用于表示或者存储对象的格式,同 XML,但是比 XML 更小。
  2. 基本语法
    ①.Json 键值对:键值对是 Json 的基本构成。其中,名称即对象的属性名称,必须包含在双引号( " " )中;值即对象对应的属性值;名称和值之间用冒号( : )隔开。
    ②.Json 值:Json 的值可以是以下几种:字符串、数字( 整型、浮点型 )、布尔值( ture、false )、空值( null )、数组、对象。
    ③.Json 对象:Json 对象是用大括号( {、} )括起来的一系列 Json 键值对的集合,键值对之间用逗号( , )隔开。
    ④.Json 数组:Json 数组是用中括号( [、] )括起来的一系列 Json 值的集合,值之间用逗号( , )隔开。

JsonCpp

  1. 概念
    JsonCpp 是 C++ 中一个常用的第三方 Json 解析库,JsonCpp 是开源以及跨平台的。
  2. Json 下载
    最新版下载地址:https://github.com/open-source-parsers/jsoncpp
  3. Json 编译
    ①.关于 CMake:CMake 是一个跨平台的编译工具,可以用来描述所有平台的编译过程,能够输出各种各样的 makefile 或者 project 文件。
    ②.编译环境:Win10+Visual Studio 2017。
    ③.使用 Visual Studio 2017 打开解压目录中的 CMakeLists.txt 文件。在这里插入图片描述
    ④.更改CMake 设置:分别修改 CMakeSettings.json 中的 generator(生成器名称)、buildCommandArgs(命令行参数) 、buildRoot(生成路径)的参数值,详细参考微软官方文档在这里插入图片描述⑤.sln 项目生成:右键 CMakeLists.txt 选择全部生成,会在配置的生成目录生成项目文件。
    ⑥. jsoncpp.dll 生成:用 Visual Studio 2017 打开解决方案 jsoncpp.sln,选择项目 jsoncpp_lib 进行生成。
  4. 在项目中应用
    ①.文件复制:分别将 lib\Debug\jsoncpp.lib、bin\Dubug\jsoncpp.dll、jsoncpp-1.9.4\include 复制到自己的工程目录。
    ②.路径设置:分别在工程->属性->C/C+±>常规->附加包含目录、工程->属性->链接器->常规->附加库目录添加头文件及 lib 文件路径。
    ③.项目应用:添加头文件 #include <json/json.h>,引入 lib 文件 #pragma comment(lib,“jsoncpp.lib”)

JsonCpp 使用

  1. Json::Value
    ①.概念:Value 用来表示各种类型的对象。
    ②.对象数据的读取和赋值
//通过属性名称进行读写
Json::Value person;
person["name"] = “张三”;
string name = person["name"].asString() ;
//数组对象的数据读写
Json::Value root;
root[0] = person;//通过下标赋值
root.append(person);// 使用 append 方法赋值
int size = root.size();//数组长度
Json::Value person = root[0] ;
  1. 对中文的支持
    Jsoncpp 默认采用 utf8 编码,中文字符会转换成 unicode 字符,可通过设置禁止编码转换,直接显示为汉字。
Json::StreamWriterBuilder writerBuilder;
writerBuilder.settings_["indentation"] = "";
writerBuilder.settings_["emitUTF8"] = true;//默认为false
  1. 生成 Json 对象到字符串
Json::Value root,data;
root["action"] = "run";
data["number"] = 1;
root["data"] = data;
Json::StreamWriterBuilder builder;
const std::string json_file = Json::writeString(builder, root);
  1. 生成 Json 对象到标准输出流
Json::Value root;
Json::StreamWriterBuilder builder;
const std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
root["Name"] = "robin";
root["Age"] = 20;
writer->write(root, &std::cout);
  1. 从字符串解析 Json 对象
JSONCPP_STRING errs;
Json::Value root, person, language, mail;
Json::CharReaderBuilder readerBuilder;
std::unique_ptr<Json::CharReader> const jsonReader(readerBuilder.newCharReader());
bool res = false;
res = jsonReader->parse(jsonStr.c_str(), jsonStr.c_str() + jsonStr.length(), &root, &errs);
  1. 从标准输入流解析 Json 对象
Json::Value root;
std::ifstream ifs;
Json::CharReaderBuilder builder;
JSONCPP_STRING errs;
bool res = false;
res = parseFromStream(builder, ifs, &root, &errs);

在这里插入图片描述

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值