知方号

知方号

开源库推荐

开源库推荐

背景

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它已经成为了互联网上广泛使用的数据交换格式之一。在Web开发、移动应用开发以及各种数据交换场景中,JSON都扮演着重要的角色。为了在C++中更方便地处理JSON数据,出现了很多优秀的开源库,jsoncpp在诸多开源库中一枝独秀。

概述

jsoncpp它提供了简洁而强大的API,使得在C++中解析和生成JSON数据变得非常便捷。尤其是在其轻量级、跨平台、简洁等特性的加持下,进一步扩大了其影响力。

轻量级:jsoncpp 是一个轻量级的库,使用起来非常便捷,不会增加太多额外的负担。跨平台:jsoncpp 可以在各种平台上运行,包括Windows、Linux和macOS等。简单易用的API:jsoncpp 提供了简单易用的API,使得解析和生成JSON数据变得十分简单。

使用

下载和安装

jsoncpp的下载地址(https://github.com/open-source-parsers/jsoncpp)下载源码,然后编译生成静态库或动态库,或者直接将源代码集成到项目中。编译生成静态库或动态库需要依赖cmake,该部分的讲解已汗牛充栋,在此不再赘述。建议直接将源码集成到自己的项目中,不仅方便调试,还可以减少依赖库的数量。后文以集成源码到项目的形式讲解。

jsoncpp提供了python脚本,用于自动筛选在使用源码集成时需要的文件。操作如下:

进入jsoncpp的根目录中单击amalgamate.py脚本(需要python环境)

则会在jsoncpp的的文件夹内生成dist文件夹,内含源码集成时所必需的文件,如下图,

由上图可知,源码集成时,其依赖2个头文件,一个源文件。

代码示例

待生成和解析的json字符串如下

代码语言:javascript复制{ "address" : { "city" : "Beijing", "country" : "China" }, "age" : 30, "is_student" : false, "name" : "夏利", "subjects" : [ { "name" : "Chinese", "score" : 89 }, { "name" : "English", "score" : 72 }, { "name" : "Math", "score" : 68 } ]}

使用jsoncpp生成json字符串

代码语言:javascript复制#include#include"./dist/json/json.h"constexprint subject_num=3;std::string subject_name[subject_num]={"Chinese","English","Math"};intsubject_score[subject_num] = { 89,72,68 };std::string using_write(){ Json::Value root; root["name"]="夏利"; root["age"]=30; root["is_student"]=false; for (size_t i = 0; i < subject_num; i++) { //数组 Json::Value item; item["name"] = subject_name[i]; item["score"] = subject_score[i]; root["subjects"].append(item); } //添加对象 Json::Value address; address["city"] = "Beijing"; address["country"] = "China"; root["address"]=address; Json::StreamWriterBuilder writebuild; writebuild["emitUTF8"] = true;//解决中文乱码问题 auto s = Json::writeString(writebuild, root); return s;}

使用jsoncpp解析json字符串

代码语言:javascript复制int using_read(){ const std::string json_data = std::string( "{ "address" : { "city" : "Beijing", "country" : "China" }, "age" : 30, "is_student" : false, "name" : "夏利", "subjects" : [ { "name" : "Chinese", "score" : 89 }, { "name" : "English", "score" : 72 }, { "name" : "Math", "score" : 68 } ] }"); Json::Value root; Json::Reader reader; bool parsing_successful = reader.parse(json_data, root); if (!parsing_successful) { std::cerr

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。