本文章记录作者对json操作的一点心得。

目录

  • 准备
    • 项目配置
  • 代码
    • json格式说明
    • 运用
    • 初始化
  • 调用时碰到的错误

准备

本文选择第三方库JsonCpp来解析json
下载地址:https://sourceforge.net/projects/jsoncpp/
JsonCpp主要包含三种类型的class:Value Reader Writer。
jsoncpp中所有对象、类名都在namespace json中,包含json.h即可。

项目配置

包含路径。

附加库

下面是 包含头文件

#include "json\json.h"

代码

json格式说明

下面是 json对象

"var":
{"first":{"first_one":11,"first_two":true},
"second":{"second_one":"21","second_two": [{"firstName": "Bill","lastName": "Gates"},{"firstName": "George","lastName": "Bush"},{"firstName": "Thomas","lastName": "Carter"}]}
}
属性first是个对象,包含属性first_one(值:int类型11)和first_two(值:bool类型true),
属性second也是个对象,这个对象由包含属性second_one(值:21)和属性second_two,
属性second_two又是一个数组包含值。

对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

运用

下面是 json操作

void readJson() {string strValue;//该字符串为上述json对象Json::Reader reader;Json::Value value;if (reader.parse(strValue, value))//strValue字符串转value的json对象{   std::string out = value["var"].asString();//var的json对象转换为string类型字符串std::cout << out << std::endl;//显示var对象内容//second_two对象初始化secondObj if(value["var"]["first"]["first_two"].asBool()==TRUE){const Json::Value second_twoObj = value["second"]["second_two"];for (unsigned int i = 0; i < arrayObj.size(); i++){   if (!second_twoObj [i].isMember("firstName")) continue;out = second_twoObj [i]["firstName"].asString();std::cout << out;if(!second_twoObj [i]["lastName"].isNull())//判断是否为空{second_twoObj [i].removeMember("lastName");}if (i != (second_twoObj .size() - 1)) std::cout << std::endl;}  } }
}

以上是对json类型进行操作,

reader.parse(strValue, value),把strValue的json格式字符串转换为json类,
asString()/asBool()/asInt()/asCString()...把json键值对转换为对应类型
isMember() 判断是否有该键值对。
removeMember() 去掉该键值对。

初始化

“var”:
{
“first”:
{“first_one”:11,“first_two”:true},
“second”:
{“second_one”:“21”,
“second_two”:
[
{
“firstName”: “Bill”,
“lastName”: “Gates”
},
{
“firstName”: “George”,
“lastName”: “Bush”
},
{
“firstName”: “Thomas”,
“lastName”: “Carter”
}
]
}
}

void writeJson() {Json::Value second_two;Json::Value first;Json::Value var;//初始化second_two名json数组second_two[1]["firstName"] = Json::Value("Bill");second_two[1]["lastName"] = Json::Value("Gates");second_two[2]["firstName"] = Json::Value("George");second_two[2]["lastName"] = Json::Value("Bush");second_two[3]["firstName"] = Json::Value("Thomas");second_two[3]["lastName"] = Json::Value("Carter");//初始化second名json类second["second_two"]=second_two;second["second_one"]=Json::Value("21");//first["first_one"]=Json::Value(11);//first["first_two"]=Json::Value(TRUE);//var["first"]=first;var["second"]=second;var.toStyledString();std::string out = root.toStyledString();std::cout << out << std::endl;
}

初始化json对象,创建键值对。

调用时碰到的错误

Json::Value().asString()
//时只能单个键值对并不能
std::string a =var["first"].asString();
//这种用法是错误的,只能提取单个键值对

这里要注意Json::Value()括号内的字符串不能为CString,必须为string类型。

C++调用JsonCpp库,json简单操作以及常用函数相关推荐

  1. Dictionary作为数据源绑定,调用c++库中返回为BYTE*的函数,listView项排序

    最近在做一个电子档案管理的项目.现在还处于初期,只是做一个简单demo拿去跟客户演示.至于最后谈不谈得下来,到底做不做,反正我是不看好,但没因为这样就马马虎虎.草草了事.这个项目算是b/s加c/s混合 ...

  2. tensorFlow基础操作及常用函数

    tensorFlow基础操作及常用函数 1. 安装Tensorflow 2. TensorFlow基本操作 3. TensorFlow常用函数 3.1 常用矩阵创建方式 3.2 高斯初始化及洗牌操作 ...

  3. C++调用JSON-CPP库实现JSON字符串解析

    1.下载JSON-CPP库https://sourceforge.net/projects/jsoncpp/ 2.解压jsoncpp-src-0.5.0.tar 3.打开VS2010新建一个名为tes ...

  4. c#3.0关于JSON简单操作的实用帮助类(泛型实现)

    关于json的操作,网上一搜一大把.避免重复造轮子,整理发布一个笔者在项目开发中经常用到的一个json实用帮助类,泛型实现,非常方便.不废话了,贴代码: 1.json操作的帮助类: Code usin ...

  5. python文件函数_Python之文件操作及常用函数

    常见全局函数: 1.dir(nameStr): 常见系统变量: 1.sys.path:一个包含Python自动搜索文件的路径或目录的列表.可使用列表的操作方法修改.增加默认搜索路径. 一.模块 1.创 ...

  6. 数据处理库Pandas(简单操作)

    1.pandas介绍     1.什么是pandas         pand - panel data为面板数据         as - analysis为分析         综上所述为面板数据 ...

  7. TortoiseSVN搭建本地版本库及简单操作使用

    TortoiseSVN是windows上一款著名的版本控制软件,对于我们管理自己的代码,特别是对一个团队来说,非常重要. 本文探讨的是如何搭建本地的版本库. (1)安装TortoiseSVN之后需要创 ...

  8. 前端HTML调用jQuery库,属性操作:更换图片、添加字体样式(前端:HTML搭配jQuery系列教程六)

    属性操作:更换图片.改变字体样式 1.更换图片: 在jQuery中,我们可以使用attr()方法来获取元素的某一个HTML属性值. 语法: $().attr("属性名") 说明:获 ...

  9. 2022 新版本c++安装opencv库的简单操作教程

    近期选修了计算机视觉 的课程,正好更新一下最新的cpp下的opencv库的教程. 废话少说干货降临: 1. 网站下载解压对应opencv库 这里我们推荐官网下载:https://opencv.org/ ...

最新文章

  1. BeanShell使用json.jar包处理Json数据
  2. ORACLE分区表详解
  3. python与办公自动化-用 Python 自动化办公,我与大神之间的差距一下就
  4. 【图像】直方图均衡化
  5. nodejs操作mongodb增删改查
  6. 数据分割-并查集+set
  7. 科目三考试里面的会车,调头,靠边停车通过标准
  8. 绝大部分人根本没有职业素养
  9. js高级学习笔记-14-从函数运行和内存角度理解闭包
  10. CCS6.2.0 安装步骤详解
  11. 基于SpringBoot的行影旅行网
  12. 小程序容器化:基于uni-app的Android小程序开发
  13. YOLO学习笔记4——YOLOV2详解+论文解读
  14. [4G5G基础学习]:L3 RRC层概述与总体架构、ASN.1消息、无线承载SRB, DRB、终端三种状态、MIB, SIB,NAS消息类型
  15. anime+tv+android,Anime TV Watch - KissAnime
  16. 领航云计算发展风向标,亚马逊云科技的这些硬核布局值得关注
  17. postman的批量传送数据和接口关联
  18. 第一届『Citric杯』NOIP提高组模拟赛 题解
  19. Markdown 更改字体颜色
  20. 【K8S】ctr和crictl的区别

热门文章

  1. 使用python的requests+bs4 实现京东的手机商品数据收集
  2. Verilog数字系统设计教程[第4版]夏宇闻——第三部分练习十二
  3. 全球首例!黑产利用SS7漏洞接管用户手机卡偷钱
  4. Go语言Mutex加锁流程
  5. WGS84坐标系发展历程
  6. 介绍几款实用的MySQL和数据库Web客户端
  7. 每个人的华为都在沦陷
  8. CentOS7安装Oracle 11gR2
  9. 聊聊我与Podcast的故事
  10. JMeter性能测试,完整快速入门篇