JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。通常用于数据交换或存储。
JsonCpp是一个基于C++语言的开源库,用于C++程序的Json数据的读写操作。
JsonCpp是一个开源库
下载地址:https://github.com/open-source-parsers/jsoncpp
文档地址:http://open-source-parsers.github.io/jsoncpp-docs/doxygen/index.html
使用
官方提供的集成方案:https://github.com/open-source-parsers/jsoncpp/wiki/Amalgamated
其中最简单的方法是执行项目根目录中的python脚本,构建头文件和源文件。
1. 在安装Python环境的控制台中进入jsoncpp项目根目录,
2. 执行命令:
python amalgamate.py
3. 将生成的dist
目录拷贝到自己的项目中,其中包源文件jsoncpp.cpp
和头文件json.h、
json-forwards.h
。
基本类和方法
使用jsoncpp
库时需要包含头文件#include <json/json.h>(包含目录根据需要修改)
方法命名空间:Json
常用类
Value:用于存储Json数据
CharReader:从字符串中读取Json数据的抽象类
CharReaderBuilder:CharReader类的实现,可以读取标准输入流中的数据
Demo
定义Json数据结构,并输出数据
Json::Value jsonRoot; //定义根节点 Json::Value jsonItem; //定义一个子对象 jsonItem["item1"] = "one"; //添加数据 jsonItem["item2"] = 2; jsonRoot.append(jsonItem); jsonItem.clear(); //清除jsonItem jsonItem["item1.0"] = 1.0; jsonItem["item2.0"] = 2.0; jsonRoot["item"] = jsonItem; cout << jsonRoot.toStyledString() << endl; //输出到控制台
将Json写入到文件
ofstream ofs; //标准输出流 ofs.open("sample.json"); //创建文件 ofs << jsonRoot.toStyledString(); //输出 ofs.close();
从文件读取Json数据
ifstream ifs; //标准输入流 ifs.open("sample.json"); jsonRoot.clear(); Json::CharReaderBuilder builder; builder["collectComments"] = false; JSONCPP_STRING errs; if (!parseFromStream(builder, ifs, &jsonRoot, &errs)) //从ifs中读取数据到jsonRoot { return; }
从字符串读取Json数据
string jsonStr = jsonRoot.toStyledString(); //json字符串 jsonRoot.clear(); Json::CharReaderBuilder builder; builder["collectComments"] = false; JSONCPP_STRING errs; Json::CharReader* reader = builder.newCharReader(); if (!reader->parse(jsonStr.data(), jsonStr.data() + jsonStr.size(), &jsonRoot, &errs)) //从jsonStr中读取数据到jsonRoot { return; }
获取Json中的键值对
for (auto i = 0; i < jsonRoot.size(); i++)//遍历数组[] { for (auto sub= jsonRoot[i].begin(); sub != jsonRoot[i].end(); sub++)//遍历对象{} { cout << sub.name() << " : " << jsonRoot[i][sub.name()] << endl; //方法1 cout << sub.name() << " : " << (*sub) << endl; //方法2
} }
eg: jsonRoot= [ { "item1" : 1, "item2" : 2, }, { "a" : "a", "b" : 2.0, } ]
出处:https://www.cnblogs.com/esCharacter/p/7657676.html