前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开源库推荐——jsoncpp

开源库推荐——jsoncpp

作者头像
程序员的园
发布2024-07-18 13:23:03
430
发布2024-07-18 13:23:03
举报
文章被收录于专栏:程序员的园——原创文章

背景

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<iostream>
#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 << "Failed to parse JSON data: " << reader.getFormattedErrorMessages() << std::endl;
        return -1;
    }
    std::string name = root["name"].asString();
    int age = root["age"].asInt();
    bool is_student = root["is_student"].asBool();
    std::string city = root["address"]["city"].asString();
    std::string country = root["address"]["country"].asString();
    auto is_obj = root["address"].isObject();

    auto  subs = root["subjects"];
    for (auto sub : subs)
    {
        std::cout<<"\n"<<sub["name"].asString()<<"\t";
        std::cout <<  sub["score"].asInt();
    }
}

总结

jsoncpp 是一个在C++中处理JSON数据的优秀库,它提供了简单易用的API,使得在C++中解析和生成JSON数据变得非常方便。通过 jsoncpp,我们可以轻松地处理JSON数据,应用于各种场景中,包括Web开发、移动应用开发以及配置文件等。如果你需要在C++项目中处理JSON数据,不妨尝试一下 jsoncpp。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员的园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档