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

  1. C++开源库:Json解析:JsonCpp实践

    1:下载jsonCpp 编译源码 https://blog.csdn.net/u013456468/article/details/124908853      https://blog.csdn.n ...

  2. C++入门教程(20)json解析(jsoncpp)

    jsoncpp在github上地址: https://github.com/open-source-parsers/jsoncpp jsoncpp在使用的时候需要先编译 在window上可以使用cma ...

  3. C++调用 Json解析与处理库

    什么是Json? Json(JavaScript Object Notation) 是一种轻量的数据交换格式,和 XML 一样在 Web 开发中常用.在 Ajax 的应用中,前台基本上会用到 JSON ...

  4. C# JSon解析之三个库的性能对比

    Swifter.Json.System.Text.Json.NewtonJson(各自的简介和使用自行百度或看官方文档,)解析Json的性能对比(.Net5): 解析一个拥有59个属性的对象,Coun ...

  5. VisualFreeBasic调用超轻量级JSON解析器cJSON库

    VisualFreeBasic之所以能吸引我有几个原因 1.语法简单,跟VB的语法极度相似 2.生成的程序提交极小,空项目只有151K 3.勇芳封装了大量的WinAPI和自定义函数,可以大大的减轻程序 ...

  6. Json解析工具Jackson(简单应用)

    概述 Jackson库(http://jackson.codehaus.org),是基于Java语言的开源json格式解析工具,整个库(使用最新的2.2版本)包含3个jar包: jackson-cor ...

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

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

  8. [转]C++的Json解析库:jsoncpp和boost

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

  9. C++的Json解析库:jsoncpp

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

最新文章

  1. 使用Lambda表达式重构委托
  2. 四十四、Stata统计操作和绘图
  3. 为什么虚拟机的linux系统IP是10.0.2.15
  4. 通用的N-Tier模型合理么?
  5. 赛锐信息:SuccessFactors激活高效能人员战略
  6. 天线远场定义_高频电磁仿真软件的选型和评估(天线、雷达、电路与器件、无线电总体等)——探讨分享,思路梳理...
  7. 开篇第一章,开宗明义。
  8. python常见报错异常大全,根据异常找出根本问题,一键解决,建议收藏
  9. HTML5期末大作业:大学生个人网站设计——我们的班级(7页) HTML+CSS+JavaScript 学生DW网页设计作业成品 html网页制作代码大全 html5网页设计作业代码
  10. 2018清华计算机专业优秀学生名单,2018信息学竞赛清华北大优秀学生签约名单
  11. 通过UA判断手机的类型
  12. html5抠图,抠图放大招,5分钟解决白底图难题!
  13. 基于哈夫曼编码的文件压缩解压
  14. Vivado时钟之间的三种关系
  15. android 简单的exoplayer全景播放器
  16. BurpSuite抓包出现建立安全连接失败(Software is Preventing Firefox From Safely Connecting to This Si)
  17. Cuda相关的函数数
  18. 使用Python连接阿里云物联网
  19. Eclipse插件 JSDT
  20. 记账后,如何查看、修改或删除不需要的收支

热门文章

  1. 2022Java春招面试经历,mybatis面试题常问
  2. 7.阿布云代理服务器试用
  3. 公告:C币系统即将上线
  4. 怎样设计一个好的数据库
  5. [DP] [贪心] [Vijos P1417] 魔法塔防 (mtower)
  6. h5页面置灰处理源代码,兼容IE(优雅降级提供下载浏览器链接)
  7. Unity3D-微信跳一跳(一)
  8. android手机百度地图开发
  9. 弱视能学计算机应用技术,弱视
  10. CVPR 2022 | MLP才是无监督学习比监督学习迁移性能好的关键因素