jsoncpp 是比较出名的 C++ JSON 解析库。在 JSON官网也是首推的
编译时的问题
/usr/include/x86_64-linux-gnu/bits/floatn.h:30: error: missing binary operator before token "("
? __GNUC_PREREQ (4, 3) \
问题原因是, 系统里也有一个features.h头文件冲突了,qtcreator的pro文件头文件件路径
qt的pro文件修改方法: 就是不能访问到jsoncpp当前的目录里
#包含头文件路径
INCLUDEPATH += $$PWD/src
#INCLUDEPATH += $$PWD/src/jsoncpp 这里要注释掉
makefile的修改访问:
学习网址:
c++使用Json之jsoncpp简介:https://blog.csdn.net/guotianqing/article/details/94378309
jsoncpp使用方法: https://www.coonote.com/cplusplus-note/jsoncpp-tutorial.html
json几个小例子:https://www.cnblogs.com/daguozb/p/7989706.html
这里主要介绍json的格式
读和写的例子
#include <signal.h>
#include <fstream>
#include <iostream>
#include <jsoncpp/json.h>
#include <cassert>
#include <errno.h>
#include <string.h>
using namespace std;
/*
//json例子
{
"name": "姓名",
"age": 27
}
*/
static int test_json_readfile(void)
{
ifstream ifs;
ifs.open("test.json");
assert(ifs.is_open());
Json::Reader reader;
Json::Value root;
if (!reader.parse(ifs, root, false))
{
cout << "reader parse error: " << strerror(errno) << endl;
return -1;
}
string name;
int age;
int size;
size = root.size();
cout << "total " << size << " elements" << endl;
for (int i = 0; i < size; ++i)
{
name = root[i]["name"].asString();
age = root[i]["age"].asInt();
cout << "name: " << name << ", age: " << age << endl;
}
return 0;
}
//测试输入string字符串
static int test_json_readstring(void)
{
std::string strjson="{ \"type\": \"desk\", \"param\":64 }";
Json::Reader reader;
Json::Value root;
if (!reader.parse(strjson, root, false))
{
std::cout << "reader parse error: " << strerror(errno) << endl;
return -1;
}
string type;
int param;
int size;
size = root.size();
std::cout << "total " << size << " elements" << endl;
type = root["type"].asString();
param = root["param"].asInt();
std::cout<<"type: "<<type<<std::endl;
std::cout<<"param: "<<param<<std::endl;
return 0;
}
static void test_json_write()
{
string f = "write.json";
Json::Value root;
//Json::FastWriter writer; //最快的,直接输出,没有格式化
Json::StyledWriter writer; //是格式化后的 json
Json::Value person;
person["age"] = 28;
person["name"] = "cn";
root.append(person);
//赋值给string
string json_file = writer.write(root);
ofstream ofs;
ofs.open(f);
assert(ofs.is_open());
ofs << json_file;
ofs.close();
return;
}
int main()
{
//test_json_read();
test_json_readstring();
//test_json_write();
return 0;
}
生成二级json例子
//测试生成二级json
static int test_json_write2()
{
string f = "write2.json";
Json::Value root;
//Json::FastWriter writer; //最快的,直接输出,没有格式化
Json::StyledWriter writer; //是格式化后的 json
Json::Value person;
Json::Value data;
data["address"]="beijing";
person["age"] = 28;
person["name"] = "cn";
person["data"]=data;
//root.append(person);
//赋值给string
string json_file = writer.write(person);
//保存文件
ofstream ofs;
ofs.open(f);
assert(ofs.is_open());
ofs << json_file;
ofs.close();
return 0;
}
int main()
{
test_json_write2();
return 0;
}
运行结果:
{
"age" : 28,
"data" : {
"address" : "beijing"
},
"name" : "cn"
}