Json

Json是一种轻量级数据交换格式,可以表示数字,字符串,布尔值,null,数组,键值对:

{
"encoding" : "UTF-8",
"plug-ins" : [
"python",
"c++",
"ruby"
],
"indent" : { "length" : 3, "use_space": true }
}

JsonCpp

JsonCpp是用C++编写的Json库,接口设计精巧易用:

# 安装步骤
wget https://github.com/open-source-parsers/jsoncpp/archive/1.7.7.tar.gz -O jsoncpp-1.7.7.tar.gz
tar -zxvf jsoncpp-1.7.7.tar.gz
cd jsoncpp-1.7.7
mkdir build && cd build
cmake3 -DJSONCPP_WITH_TESTS=Off -DJSONCPP_WITH_PKGCONFIG_SUPPORT=Off ..
sudo make install

使用案例

从字符串解析出Json对象

#include <iostream>
#include <string>
#include <memory>
#include <json/json.h> int main() {
// R+字符串可以避免使用转义字符'\'
std::string rawJson = R"({"Age": 20, "Name": "colin"})";
constexpr bool shouldUseOldWay = false;
// 新版本可以使用Json::String
JSONCPP_STRING err;
Json::Value root; if (shouldUseOldWay) {
Json::Reader reader;
reader.parse(rawJson, root);
} else {
// 新版本的charReader接口更简洁
Json::CharReaderBuilder builder;
const std::unique_ptr<Json::CharReader> reader(builder.newCharReader());
if (!reader->parse(rawJson.c_str(), rawJson.c_str() + rawJson.size(), &root, &err)) {
std::cout << "error" << std::endl;
return EXIT_FAILURE;
}
}
const std::string name = root["Name"].asString();
const int age = root["Age"].asInt(); std::cout << name << std::endl;
std::cout << age << std::endl;
return EXIT_SUCCESS;
}

从输入流解析出Json对象

#include <iostream>
#include <fstream>
#include <string>
#include <memory>
#include <json/json.h> int main(int argc, char const *argv[])
{
(void)argc; Json::Value root;
std::ifstream ifs;
ifs.open(argv[1]); Json::CharReaderBuilder builder;
// 可以直接通过builder设置读取选项
builder["collectComments"] = true;
JSONCPP_STRING errs;
if (!parseFromStream(builder, ifs, &root, &errs)) {
std::cout << errs << std::endl;
return -1;
}
std::cout << root << std::endl; return 0;
}

最新文章

  1. HashMap两种遍历方式的深入研究
  2. Dapper Vs Dbentry
  3. python md5加密中文
  4. MVC ActionResult JsonResult
  5. Buy Tickets(poj 2828)
  6. 在hdfs上存取xml文件的实现代码
  7. My集合框架第四弹 HashTable(链表解决冲突)
  8. Dozer应用——类之间值的映射
  9. JS三级折叠菜单特效 自动收缩其它级
  10. Function 1 - hello world
  11. 《HelloGitHub》第 36 期
  12. Jenkins高级用法 - Jenkinsfile 介绍及实战经验
  13. 类 Calendar
  14. 不显示TensorFlow加速指令警告
  15. Tensorflow[目录结构]
  16. 3dmax多个版本软件的安装包以及安装教程
  17. select into tb_temp2 from tb_temp1 创建临时表实现上一个、下一个功能,使用完毕就删除临时表
  18. Windows Server上iSCSI的Best Practices
  19. jmeter 网速
  20. Java 设计模式系列(四)生成器模式

热门文章

  1. linux基础一(目录结构)
  2. 深入理解 vue 中 scoped 样式作用域的规则
  3. java 多线程-3
  4. maximo入门---开发者提要
  5. 永久激活(idea,pycharm等推荐使用)
  6. 【性能优化】面试官:Java中的对象都是在堆上分配的吗?
  7. 【转】postgreSQL​之autovacuum性能问题分析(二)
  8. dubbo学习(五)注册中心zookeeper
  9. 【Processing-日常4】等待动画2
  10. CUMTCTF&#39;2020 已做wp