C++ JSON处理库 CJsonObject 的使用
C++ JSON处理库 CJsonObject 的使用
- 一、简介
- 二、使用示例
- 1. 解析一个json格式文件
- 2.1.1 a.json
- 2.1.2 解析程序
- 2.1.3 运行结果
- 2. 解析一个字符串并读取键值
- 2.2.1 代码
- 2.2.2 输出
- 3. 取值及修改值
- 4. 增加键
- 2.4.1 代码
- 2.4.2 输出
- 5. 删除键
- 6. 复制对象
- 7. 遍历键值
- 2.7.1 代码
- 2.7.2 输出
- 8. 增加键
- 9. Get方法数组值
- 2.9.1 代码
- 2.9.2 输出
- 10. 函数下标取数组值
- 2.10.1 代码
- 2.10.2 输出
- 11. 空值作为键和值
- 2.11.1 代码
- 2.11.2 输出
- 12. 判断键是否存在
一、简介
CJsonObject 是一个基于cJSON开发的、适用于c++的轻量级的JSON处理器。
开源地址:
https://gitee.com/Bwar/CJsonObject.git
二、使用示例
1. 解析一个json格式文件
2.1.1 a.json
{"a":"hello"}
2.1.2 解析程序
#include <string>
#include <iostream>
#include <fstream>
#include <sstream>
#include "../CJsonObject.hpp"using namespace std;
int main(int argc, char* argv[])
{std::ifstream fin(argv[1]);std::string strValue;if (fin.good()){neb::CJsonObject oJson;std::stringstream ssContent;ssContent << fin.rdbuf();if (oJson.Parse(ssContent.str())){std::cout << oJson.ToString() << std::endl;oJson.Get("a", strValue);std::cout << "a=" << strValue << std::endl;}else{std::cerr << "parse json error" << "\n";// << ssContent.str() << std::endl;}fin.close();}
}
2.1.3 运行结果
./CJsonObjectTest "a.js"
{"a":"12345"}
a=12345
2. 解析一个字符串并读取键值
2.2.1 代码
#include <string>
#include <iostream>
#include <fstream>
#include <sstream>
#include "../CJsonObject.hpp"using namespace std;int main(int argc, char* argv[])
{std::string strValue;int iValue;double fTimeout;neb::CJsonObject oJson("{\"refresh_interval\":60,""\"test_float\":[18.0, 10.0, 5.0],""\"test_int\":[135355, -1844674407370955161, -935375],""\"timeout\":12.5,""\"dynamic_loading\":[""{""\"so_path\":\"plugins/User.so\", \"load\":false, \"version\":1,""\"cmd\":[""{\"cmd\":2001, \"class\":\"neb::CmdUserLogin\"},""{\"cmd\":2003, \"class\":\"neb::CmdUserLogout\"}""],""\"module\":[""{\"path\":\"im/user/login\", \"class\":\"neb::ModuleLogin\"},""{\"path\":\"im/user/logout\", \"class\":\"neb::ModuleLogout\"}""]""},""{""\"so_path\":\"plugins/ChatMsg.so\", \"load\":false, \"version\":1,""\"cmd\":[""{\"cmd\":2001, \"class\":\"neb::CmdChat\"}""],""\"module\":[]""}""]""}");cout << oJson.ToString() << endl;cout << "-------------------------------------------------------------------" << endl;cout << oJson["dynamic_loading"][0]["cmd"][1]("class") << endl;
}
2.2.2 输出
./CJsonObjectTest
{"refresh_interval":60,"test_float":[18.000000000000000,10.000000000000000,5.000000000000000],"test_int":[135355,-1844674407370955161,-935375],"timeout":12.500000000000000,"dynamic_loading":[{"so_path":"plugins/User.so","load":false,"version":1,"cmd":[{"cmd":2001,"class":"neb::CmdUserLogin"},{"cmd":2003,"class":"neb::CmdUserLogout"}],"module":[{"path":"im/user/login","class":"neb::ModuleLogin"},{"path":"im/user/logout","class":"neb::ModuleLogout"}]},{"so_path":"plugins/ChatMsg.so","load":false,"version":1,"cmd":[{"cmd":2001,"class":"neb::CmdChat"}],"module":[]}]}
-------------------------------------------------------------------
neb::CmdUserLogout
3. 取值及修改值
int iValue;double fTimeout;oJson["dynamic_loading"][0]["cmd"][0].Get("cmd", iValue);cout << "iValue = " << iValue << endl;oJson["dynamic_loading"][0]["cmd"][0].Replace("cmd", -2001);oJson["dynamic_loading"][0]["cmd"][0].Get("cmd", iValue);cout << "iValue = " << iValue << endl;oJson.Get("timeout", fTimeout);
输出:
./CJsonObjectTest
iValue = 2001
iValue = -2001
4. 增加键
2.4.1 代码
neb::CJsonObject oJson("{\"refresh_interval\":60,""\"test_float\":[18.0, 10.0, 5.0],""\"timeout\":12.5""}");oJson.AddEmptySubObject("depend");oJson["depend"].Add("nebula", "https://github.com/Bwar/Nebula");oJson["depend"].AddEmptySubArray("bootstrap");oJson["depend"]["bootstrap"].Add("BEACON");oJson["depend"]["bootstrap"].Add("LOGIC");oJson["depend"]["bootstrap"].Add("LOGGER");oJson["depend"]["bootstrap"].Add("INTERFACE");oJson["depend"]["bootstrap"].Add("ACCESS");cout << oJson.ToFormattedString() << endl;
2.4.2 输出
./CJsonObjectTest
{"refresh_interval": 60,"test_float": [18.000000000000000, 10.000000000000000, 5.000000000000000],"timeout": 12.500000000000000,"depend": {"nebula": "https://github.com/Bwar/Nebula","bootstrap": ["BEACON", "LOGIC", "LOGGER", "INTERFACE", "ACCESS"]}
}
5. 删除键
oCopyJson["depend"]["bootstrap"].Delete(1);
6. 复制对象
neb::CJsonObject oCopyJson = oJson;if (oCopyJson == oJson){cout << "json equal" << endl;}
输出 :
json equal
7. 遍历键值
2.7.1 代码
neb::CJsonObject oJson("{\"refresh_interval\":60,""\"test_float\":[18.0, 10.0, 5.0],""\"test_int\":[135355, -1844674407370955161, -935375],""\"timeout\":12.5,""\"dynamic_loading\":[""{""\"so_path\":\"plugins/User.so\", \"load\":false, \"version\":1,""\"cmd\":[""{\"cmd\":2001, \"class\":\"neb::CmdUserLogin\"},""{\"cmd\":2003, \"class\":\"neb::CmdUserLogout\"}""],""\"module\":[""{\"path\":\"im/user/login\", \"class\":\"neb::ModuleLogin\"},""{\"path\":\"im/user/logout\", \"class\":\"neb::ModuleLogout\"}""]""},""{""\"so_path\":\"plugins/ChatMsg.so\", \"load\":false, \"version\":1,""\"cmd\":[""{\"cmd\":2001, \"class\":\"neb::CmdChat\"}""],""\"module\":[]""}""]""}");string strTraversing;while(oJson["dynamic_loading"][0].GetKey(strTraversing)){cout << "traversing: " << strTraversing << endl;}
2.7.2 输出
./CJsonObjectTest
traversing: so_path
traversing: load
traversing: version
traversing: cmd
traversing: module
8. 增加键
oJson["dynamic_loading"][0].Add("new_key", "new_value");while(oJson["dynamic_loading"][0].GetKey(strTraversing)){cout << "traversing: " << strTraversing << endl;}
9. Get方法数组值
2.9.1 代码
neb::CJsonObject oJson("{\"refresh_interval\":60,""\"test_float\":[18.0, 10.0, 5.0],""\"test_int\":[135355, -1844674407370955161, -935375],""\"timeout\":12.5""}");cout << oJson["test_float"].GetArraySize() << endl;float fTestValue = 0.0;for (int i = 0; i < oJson["test_float"].GetArraySize(); ++i){oJson["test_float"].Get(i, fTestValue);cout << fTestValue << "\t in string: " << oJson["test_float"](i) << endl;}
2.9.2 输出
./CJsonObjectTest
3
18 in string: 18.000000
10 in string: 10.000000
5 in string: 5.000000
10. 函数下标取数组值
2.10.1 代码
neb::CJsonObject oJson("{\"refresh_interval\":60,""\"test_float\":[18.0, 10.0, 5.0],""\"test_int\":[135355, -1844674407370955161, -935375],""\"timeout\":12.5""}");for (int i = 0; i < oJson["test_int"].GetArraySize(); ++i){cout << "in string: " << oJson["test_int"](i) << endl;}
2.10.2 输出
./CJsonObjectTest
in string: 135355
in string: -1844674407370955161
in string: -935375
11. 空值作为键和值
2.11.1 代码
neb::CJsonObject oJson("{\"refresh_interval\":60,""\"test_float\":[18.0, 10.0, 5.0],""\"test_int\":[135355, -1844674407370955161, -935375],""\"timeout\":12.5""}");oJson.AddNull("null_value");cout << oJson.IsNull("test_float") << "\t" << oJson.IsNull("null_value") << endl;oJson["test_float"].AddNull();cout << oJson.ToString() << endl;
2.11.2 输出
./CJsonObjectTest
0 1
{"refresh_interval":60,"test_float":[18.000000000000000,10.000000000000000,5.000000000000000,null],"test_int":[135355,-1844674407370955161,-935375],"timeout":12.500000000000000,"null_value":null}
12. 判断键是否存在
if (oJson.KeyExist("timeout"))cout << "timeout key exist" << endl;
C++ JSON处理库 CJsonObject 的使用相关推荐
- 新JSON绑定库JSON-B发布公开预览版
JSON-B这个有望添加到Java EE 8的JSON绑定库发布了公开预览版.该库以JSON Processing(不要同JSONP或JSON-with-padding混淆)为基础构建,旨在为诸如Ja ...
- python json库函数_python基础之JSON标准库
一.序列化的一些简单概念 我们平常使用的python对象所进行的操作是在内存中,当程序关闭就会被清空,所以我们需要用一种合适的方法将这些数据保存下来. 为了将我们的数据进行永久存储,需要引入序列化(p ...
- gson解析天气json_几种常用JSON解析库性能比较
PS:公众号推文时间工作日早晨8点50分,周末下午3点30分,不见不散哈! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本篇通过JMH来测试一下Jav ...
- json支持的最大长度_Swifter.Json 可能是 .Net 平台迄今为止性能最佳的 Json 序列化库【开源】...
Json 简介 Json (JavaScript Object Notation) 是一种轻量级的数据交换格式.它作为目前最欢迎的数据交换格式,也是各大开源贡献者的必争之地,如:阿里爸爸的 fast ...
- Node.js中package.json中库的版本号详解(^和~区别)
Node.js中package.json中库的版本号详解(^和~区别) 当我们查看package.json中已安装的库的时候,会发现他们的版本号之前都会加一个符号,有的是插入符号(^),有的是波浪符号 ...
- C++的Json解析库:jsoncpp和boost
JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org,本文不再对json做介绍,将重点介绍c++的j ...
- 黑马程序员python笔记_#华为云·寻找黑马程序员# 如何实现一个优雅的Python的Json序列化库...
[小宅按]在Python的世界里,将一个对象以json格式进行序列化或反序列化一直是一个问题.Python标准库里面提供了json序列化的工具,我们可以简单的用json.dumps来将一个对象序列化. ...
- python通过tkinter和json界面库实现考研知识点统计
python通过tkinter和json界面库实现考研知识点统计 使用下列代码前必须安装tkinter和json库 一.实现简单界面: """ from tkinter ...
- Delphi语言最好的JSON代码库 mORMot学习笔记1
mORMot没有控件安装,直接添加到lib路径, 工程中直接添加syncommons,syndb等到uses里 -------------------------------------------- ...
最新文章
- 8天学通MongoDB——第三天 细说高级操作
- 转载 :28 个 Unix/Linux 的命令行神器
- SQL优化--inner、left join替换in、not in、except
- GIS空间数据结构 - 矢量和栅格
- Numpy-随机生成以及矩阵的运算
- python 生成随机数_python 生成随机数模块random 常用方法总结
- yolo opencv_如何使用Yolo,SORT和Opencv跟踪足球运动员。
- 数据的交换输出【杭电-2016】 附题
- python读取写入文件_Python文件读写保存操作
- 【Away3D代码解读】(一):主要类及说明
- python 数据分析--2016美国竞选辩论可视化
- java的知识点运用_javaAPI的相关知识点的运用!
- 回味手写三层-增删改查
- python微信抢票脚本_春节到了 教你使用python来抢票回家
- Java 编程要点之并发(Concurrency)详解
- 2022西安交通大学912初试经验贴 专业课133
- Android Mms短信的发送流程,短信发送源码解析
- 计算机开机硬件检查,开机bios检测硬件信息方法
- java实现多元线性回归
- VASP计算笔记_弹性常数计算
热门文章
- 安装N卡驱动 要装java_安装Cuda NVIDIA图形驱动程序失败[关闭]
- 解析java多态经典习题
- Ubuntu下的录屏工具Kazam和SimpleScreenRecorder, Peek
- mysql 批量插入亿级数据做测试用
- 全网最新、最全Linux面试题(2020版)!
- XLNet:Generalized Autoregressive Pretraining for Language Understanding(2019-6-19)
- JS含有部分相同属性的两个对象快速赋值法
- Shiro实现多Realm认证、SecurityManager配置realms
- Python实现基于LSTM的中文评论情感分析
- 解决wine不能输入的问题