C++ JSON解析之jsoncpp库的使用
C++ JSON解析之jsoncpp库的使用
1.介绍
轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据,层次结构简洁清晰,易于人阅读和编写,易于机器解析和生成。
2.语法规则
a.名称/值对的集合(对象、记录、结构、字典)
{}
b.值的有序列表(数组)
[]数据在名称/值对中
数据由逗号分隔
大括号保存对象
中括号保存数组值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。
结构可以嵌套。example:
{"action" : "run","data" : {"number" : 1}
}
3.数据解析
json文件的保存
Json::Value root;Json::Value data;root["action"] = "run";data["number"] = 1;root["data"] = data;Json::StreamWriterBuilder builder;std::ofstream ofs;ofs.open("D:\\test.json");assert(ofs.is_open());builder.newStreamWriter()->write(root, &ofs);
json文件的读取
//方式一Json::Value root;std::ifstream ifs;ifs.open("D:\\test.json");Json::CharReaderBuilder builder;JSONCPP_STRING errs;if (!parseFromStream(builder, ifs, &root, &errs)){std::cout << errs << std::endl;return EXIT_FAILURE;}CString name = root["action"].asCString();int num = root["data"]["number"].asInt();cout << name << endl;cout << num << endl;return EXIT_SUCCESS;//方式二Json::Value root;std::ifstream ifs;ifs.open("D:\\test.json");Json::Reader reader;if (reader.parse(ifs,root,false)) {CString name = root["action"].asCString();int num = root["data"]["number"].asInt();cout << name << endl;cout << num << endl;}//!!!无法获取key值!!!//vector<string> Members;// Members = root.getMemberNames();
字符串的解析
const std::string rawJson = R"({"Age": 20, "Name": "colin"})";const auto rawJsonLength = static_cast<int>(rawJson.length());JSONCPP_STRING err;Json::Value root;Json::CharReaderBuilder builder;const std::unique_ptr<Json::CharReader> reader(builder.newCharReader());if (!reader->parse(rawJson.c_str(), rawJson.c_str() + rawJsonLength, &root, &err)){std::cout << "error" << std::endl;return EXIT_FAILURE;}vector<string> Members;Members = root.getMemberNames();CString ss, temp;for (int m = 0; m < Members.size(); m++) {temp.Format("key=%s,Value=%s \n", Members[m].c_str(),root[Members[m]].asString());ss += temp;}MessageBoxA(NULL, ss, "Result", MB_OK);
判断key值是否存在
bool Json::Value::isMember ( const char * key) const
添加数据
Json::Value data;data["value1"] = "111";data["value2"] = "222";data["value3"] = "333";root["Data"]=data;
删除数据
if( root.isMember("Data")){root.removeMember("Data");}
C++ JSON解析之jsoncpp库的使用相关推荐
- C++开源库:Json解析:JsonCpp实践
1:下载jsonCpp 编译源码 https://blog.csdn.net/u013456468/article/details/124908853 https://blog.csdn.n ...
- C++入门教程(20)json解析(jsoncpp)
jsoncpp在github上地址: https://github.com/open-source-parsers/jsoncpp jsoncpp在使用的时候需要先编译 在window上可以使用cma ...
- C++调用 Json解析与处理库
什么是Json? Json(JavaScript Object Notation) 是一种轻量的数据交换格式,和 XML 一样在 Web 开发中常用.在 Ajax 的应用中,前台基本上会用到 JSON ...
- C# JSon解析之三个库的性能对比
Swifter.Json.System.Text.Json.NewtonJson(各自的简介和使用自行百度或看官方文档,)解析Json的性能对比(.Net5): 解析一个拥有59个属性的对象,Coun ...
- VisualFreeBasic调用超轻量级JSON解析器cJSON库
VisualFreeBasic之所以能吸引我有几个原因 1.语法简单,跟VB的语法极度相似 2.生成的程序提交极小,空项目只有151K 3.勇芳封装了大量的WinAPI和自定义函数,可以大大的减轻程序 ...
- Json解析工具Jackson(简单应用)
概述 Jackson库(http://jackson.codehaus.org),是基于Java语言的开源json格式解析工具,整个库(使用最新的2.2版本)包含3个jar包: jackson-cor ...
- C++的Json解析库:jsoncpp和boost
JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org,本文不再对json做介绍,将重点介绍c++的j ...
- [转]C++的Json解析库:jsoncpp和boost
JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org,本文不再对json做介绍,将重点介绍c++的j ...
- C++的Json解析库:jsoncpp
JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org/,本文不再对json做介绍,将重点介绍c++的 ...
最新文章
- 使用Lambda表达式重构委托
- 四十四、Stata统计操作和绘图
- 为什么虚拟机的linux系统IP是10.0.2.15
- 通用的N-Tier模型合理么?
- 赛锐信息:SuccessFactors激活高效能人员战略
- 天线远场定义_高频电磁仿真软件的选型和评估(天线、雷达、电路与器件、无线电总体等)——探讨分享,思路梳理...
- 开篇第一章,开宗明义。
- python常见报错异常大全,根据异常找出根本问题,一键解决,建议收藏
- HTML5期末大作业:大学生个人网站设计——我们的班级(7页) HTML+CSS+JavaScript 学生DW网页设计作业成品 html网页制作代码大全 html5网页设计作业代码
- 2018清华计算机专业优秀学生名单,2018信息学竞赛清华北大优秀学生签约名单
- 通过UA判断手机的类型
- html5抠图,抠图放大招,5分钟解决白底图难题!
- 基于哈夫曼编码的文件压缩解压
- Vivado时钟之间的三种关系
- android 简单的exoplayer全景播放器
- BurpSuite抓包出现建立安全连接失败(Software is Preventing Firefox From Safely Connecting to This Si)
- Cuda相关的函数数
- 使用Python连接阿里云物联网
- Eclipse插件 JSDT
- 记账后,如何查看、修改或删除不需要的收支