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