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 的使用相关推荐

  1. 新JSON绑定库JSON-B发布公开预览版

    JSON-B这个有望添加到Java EE 8的JSON绑定库发布了公开预览版.该库以JSON Processing(不要同JSONP或JSON-with-padding混淆)为基础构建,旨在为诸如Ja ...

  2. python json库函数_python基础之JSON标准库

    一.序列化的一些简单概念 我们平常使用的python对象所进行的操作是在内存中,当程序关闭就会被清空,所以我们需要用一种合适的方法将这些数据保存下来. 为了将我们的数据进行永久存储,需要引入序列化(p ...

  3. gson解析天气json_几种常用JSON解析库性能比较

    PS:公众号推文时间工作日早晨8点50分,周末下午3点30分,不见不散哈! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本篇通过JMH来测试一下Jav ...

  4. json支持的最大长度_Swifter.Json 可能是 .Net 平台迄今为止性能最佳的 Json 序列化库【开源】...

    Json 简介 Json (JavaScript Object Notation) 是一种轻量级的数据交换格式.它作为目前最欢迎的数据交换格式,也是各大开源贡献者的必争之地,如:阿里爸爸的 fast ...

  5. Node.js中package.json中库的版本号详解(^和~区别)

    Node.js中package.json中库的版本号详解(^和~区别) 当我们查看package.json中已安装的库的时候,会发现他们的版本号之前都会加一个符号,有的是插入符号(^),有的是波浪符号 ...

  6. C++的Json解析库:jsoncpp和boost

    JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org,本文不再对json做介绍,将重点介绍c++的j ...

  7. 黑马程序员python笔记_#华为云·寻找黑马程序员# 如何实现一个优雅的Python的Json序列化库...

    [小宅按]在Python的世界里,将一个对象以json格式进行序列化或反序列化一直是一个问题.Python标准库里面提供了json序列化的工具,我们可以简单的用json.dumps来将一个对象序列化. ...

  8. python通过tkinter和json界面库实现考研知识点统计

    python通过tkinter和json界面库实现考研知识点统计 使用下列代码前必须安装tkinter和json库 一.实现简单界面: """ from tkinter ...

  9. Delphi语言最好的JSON代码库 mORMot学习笔记1

    mORMot没有控件安装,直接添加到lib路径, 工程中直接添加syncommons,syndb等到uses里 -------------------------------------------- ...

最新文章

  1. 8天学通MongoDB——第三天 细说高级操作
  2. 转载 :28 个 Unix/Linux 的命令行神器
  3. SQL优化--inner、left join替换in、not in、except
  4. GIS空间数据结构 - 矢量和栅格
  5. Numpy-随机生成以及矩阵的运算
  6. python 生成随机数_python 生成随机数模块random 常用方法总结
  7. yolo opencv_如何使用Yolo,SORT和Opencv跟踪足球运动员。
  8. 数据的交换输出【杭电-2016】 附题
  9. python读取写入文件_Python文件读写保存操作
  10. 【Away3D代码解读】(一):主要类及说明
  11. python 数据分析--2016美国竞选辩论可视化
  12. java的知识点运用_javaAPI的相关知识点的运用!
  13. 回味手写三层-增删改查
  14. python微信抢票脚本_春节到了 教你使用python来抢票回家
  15. Java 编程要点之并发(Concurrency)详解
  16. 2022西安交通大学912初试经验贴 专业课133
  17. Android Mms短信的发送流程,短信发送源码解析
  18. 计算机开机硬件检查,开机bios检测硬件信息方法
  19. java实现多元线性回归
  20. VASP计算笔记_弹性常数计算

热门文章

  1. 安装N卡驱动 要装java_安装Cuda NVIDIA图形驱动程序失败[关闭]
  2. 解析java多态经典习题
  3. Ubuntu下的录屏工具Kazam和SimpleScreenRecorder, Peek
  4. mysql 批量插入亿级数据做测试用
  5. 全网最新、最全Linux面试题(2020版)!
  6. XLNet:Generalized Autoregressive Pretraining for Language Understanding(2019-6-19)
  7. JS含有部分相同属性的两个对象快速赋值法
  8. Shiro实现多Realm认证、SecurityManager配置realms
  9. Python实现基于LSTM的中文评论情感分析
  10. 解决wine不能输入的问题