JsonCpp使用简介
来源:互联网 发布:手机藏文输入法软件 编辑:程序博客网 时间:2024/05/22 01:50
一、 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,和xml类似。
JSON 名称/值对 例如 "firstName" : "John" JSON 对象在花括号中书写,例如 { "firstName":"John" , "lastName":"Doe" } JSON 数组,数组可包含多个对象 {"employees": [{ "firstName":"John" , "lastName":"Doe" },{ "firstName":"Anna" , "lastName":"Smith" },]}JsoncppJson::Value 是jsoncpp 中最基本、最重要的类,用于表示各种类型的对象,Json::Reader 用来将内存或文件中的json数据转换成Json::Value类型Json::Writer 用来将Json::Value类型转换成内存或文件中的json数据
二、Jsoncpp环境搭建
下载地址 https://github.com/open-source-parsers/jsoncpp
下载完成后,解压,将include\json和src\lib_json目录里的文件包含到C++工程中与其他源码一起编译即可。
如在Qt中,新建non-qt c++工程,然后右键add exiting directory , 将json以及lib_json都添加到到工程当中。
三、使用Jsoncpp读取内存中的json数据
#include <iostream>#include <fstream>#include "json/json.h"using namespace std;using namespace Json;int main(int argc, char *argv[]){ const char* str = "{\"name0\": \"helloworld\",\"name1\": 100,\"name2\": 200.0,\"name3\": true}"; Json::Reader reader; Json::Value root; /*reader将Json字符串解析到root,root将包含Json里所有对象*/ if (!reader.parse(str, root)) { cout<<"reader parse error"<<endl; return -1; } //Json::Value类型可以直接使用cout打印出来 cout << "json : "<< endl << root << endl; string name0 = root["name0"].asString(); // 访问值对,name0= "helloworld" cout << "name0 : "<< name0 << endl; int name1 = root["name1"].asInt(); // 访问值对,name1 = 100 cout << "name1 : "<< name1 << endl; double name2 = root["name2"].asDouble(); // 访问值对,name2 = "200.0" cout << "name2 : "<< name2 << endl; bool name3 = root["name3"].asBool(); // 访问值对 name3 = true cout << "name3 : "<< name3 << endl; int name4 = root.get("name4", 20).asInt(); //访问值对 name4 如果不存在就返回默认值20,没有写入root当中. cout << "name4 : "<< name4 << endl; cout << "json : "<< endl << root << endl; return 0;}
四、使用Jsoncpp读取json文件,添加新的值对,删除值对,并且写入json文件
在c盘创建test.json----------------------------{"name0": "helloworld","name1": 100,"name2": 200.0,"name3": true}----------------------------#include <iostream>#include <fstream>#include "json/json.h"using namespace std;using namespace Json;int main(int argc, char *argv[]){ Json::Reader reader; Json::Value root; std::ifstream ifs; ifs.open ("c:/test.json"); if(!ifs.is_open()) { cout<<"not open test.json"<<endl; return false; } if (!reader.parse(ifs, root)) { cout<<"reader parse error"<<endl; return -1; } cout<<root<<endl; root["name4"] = Json::Value("hellword2"); //添加新值对 root["name5"] = Json::Value(300); root["name6"] = Json::Value(400.123); root["name7"] = Json::Value(true); cout<<root<<endl; root["name4"] = Json::Value("hellword3"); //如果已经存在,则修改值对内容 root["name5"] = Json::Value(500); root["name6"] = Json::Value(600.123); root["name7"] = Json::Value(false); cout<<root<<endl; root.removeMember("name6"); root.removeMember("name7"); cout<<root<<endl; Json::FastWriter writer; string strWrite = writer.write(root); ifs.close(); //先把test.json文件关闭 std::ofstream ofs; //通过ofstream把root写入json文件中 ofs.open("c:/test.json"); ofs << strWrite; ofs.close(); return 0;}
五、读取json中的数组,并且修改数组中的值对
#include <iostream>#include <fstream>#include "json/json.h"using namespace std;using namespace Json;int main(int argc, char *argv[]){ const char* str = "{\"name0\": 100," "\"name1\": " "[ {\"age\": 20}, {\"age\":23}]" "}"; Json::Reader reader; Json::Value root; if (!reader.parse(str, root)) { cout<<"reader parse error"<<endl; return -1; } cout<<root<<endl; Json::Value &name1_Value = root["name1"]; int file_size = name1_Value.size(); //获取数组name1的数组大小 cout<<"file_size = "<<file_size<<endl; for(int i=0; i<file_size; i++) //遍历所有数组中的age值对 { cout<<"name1:"<<i<<": age:"<< name1_Value[i]["age"].asInt() <<endl; name1_Value[i]["age"] = Json::Value(100);//并且修改值对 } cout<<root<<endl; return 0;}
六、根节点创建数组,在数组中插入Json::Value对象
#include <iostream>#include <fstream>#include "json/json.h"using namespace std;using namespace Json;int main(int argc, char *argv[]){ const char* str = "{\"name0\": 100}"; Json::Reader reader; Json::Value root; if (!reader.parse(str, root)) { cout<<"reader parse error"<<endl; return -1; } root["name1"].removeIndex(0); cout<<root<<endl; Json::Value item0; item0["age"] = 23; item0["male"] = true; root["name1"].append(item0);//添加一个对象 cout<<root<<endl;/* Json::Value item1; item1["age"] = 24; item1["male"] = false; root["name1"].append(item1);//再添加一个对象 cout<<root<<endl;*/ return 0;}
1 0
- Jsoncpp使用简介
- jsoncpp使用简介
- JsonCpp使用简介
- jsoncpp简介、下载、编译、使用
- JsonCpp简介
- Jsoncpp简介
- jsoncpp简介
- Jsoncpp使用
- JsonCPP 使用
- JSONCPP使用
- 使用jsoncpp
- jsoncpp使用
- jsoncpp使用
- JsonCpp使用
- jsoncpp使用
- JsonCpp 使用
- JSONcpp使用.
- jsoncpp结构简介
- 整数对查找
- 决策树算法(五)——处理一些特殊的分类
- CubieTruck安装Redis
- 使用springmvc 和nginx 搭建一个文件上传下载服务器
- jquery 那些事
- JsonCpp使用简介
- 配置 influxDB 鉴权及 HTTP API 写数据的方法
- java文字加解密
- Magento 订单后台增加支付接口来源列
- Linux下autoconf和automake使用
- java 异常
- web前端-js变量、作用域
- Android消息机制浅析
- Eclipse快捷键大全