当前位置: 首页 > article >正文

[jsoncpp]JSON序列化与反序列化

JSONCpp是一个C++库,用于解析和生成JSON数据。在本文中,我们将介绍JSONCpp的基本用法,包括如何解析JSON数据、如何访问JSON对象和数组,以及如何生成JSON数据。

1. 下载和编译JSONCpp

首先,确保您已经安装了JSONCpp库:

git clone --depth 1 https://ghproxy.cn/https://github.com/open-source-parsers/jsoncpp.git
cd jsoncpp/
mkdir build
cd build/
cmake ..
make

2. 解析JSON数据

要解析JSON数据,您需要创建一个Json::Value对象来存储解析后的JSON数据。然后,使用Json::CharReaderBuilderJson::parseFromStream函数从字符串中解析JSON数据。以下是一个示例:

#include <iostream>
#include <sstream>
#include <json/json.h>

int main() {
    Json::Value root;
    Json::CharReaderBuilder builder;
    std::string errors;

    // 使用非const字符串
    std::string json_data = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
    std::istringstream json_stream(json_data);
    bool parsingSuccessful = Json::parseFromStream(builder, json_stream, &root, &errors);

    if (parsingSuccessful) {
        std::cout << "Name: " << root["name"].asString() << std::endl;
        std::cout << "Age: " << root["age"].asInt() << std::endl;
        std::cout << "City: " << root["city"].asString() << std::endl;
    } else {
        std::cout << "Failed to parse JSON: " << errors << std::endl;
    }

    return 0;
}

3. 访问JSON对象和数组

解析成功后,您可以通过Json::Value对象访问JSON数据。以下是一个示例,演示如何访问JSON对象和数组:

#include <iostream>
#include <sstream>
#include <json/json.h>
int main() {
    Json::Value root;
    Json::CharReaderBuilder builder;
    std::string errors;

    const std::string json_data = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\", \"hobbies\":[\"reading\", \"traveling\"]}";
    std::istringstream json_stream(json_data);
    bool parsingSuccessful = Json::parseFromStream(builder, json_stream, &root, &errors);

    if (parsingSuccessful) {
        const Json::Value& hobbies = root["hobbies"];
        for (unsigned int i = 0u; i < hobbies.size(); ++i) {
             std::cout << "Hobby: " << hobbies[i].asString() << std::endl;
         }
    } else {
        std::cout << "Failed to parse JSON: " << errors << std::endl;
    }
    return 0;
}

4. 生成JSON数据

要生成JSON数据,您需要创建一个Json::Value对象,然后使用其成员函数添加数据。以下是一个示例,演示如何生成JSON数据:

#include <iostream>
#include <sstream>
#include <jsoncpp/json/json.h>
int main() {
    Json::Value root;
    root["name"] = "John";
    root["age"] = 30;
    root["city"] = "New York";
    Json::Value hobbies;
    hobbies.append("reading");
    hobbies.append("traveling");
    root["hobbies"] = hobbies;
    std::cout << "Generated JSON: " << root.toStyledString() << std::endl;
    return 0;
}

编译程序

g++ --std=c++11 -o gen gen.cpp  -I../include -L./lib -ljsoncpp

执行程序得到:

Generated JSON: {
        "age" : 30,
        "city" : "New York",
        "hobbies" :
        [
                "reading",
                "traveling"
        ],
        "name" : "John"
}

在这个示例中,我们创建了一个Json::Value对象,然后使用其成员函数添加JSON数据。最后,我们使用toStyledString()函数将生成的JSON数据转换为字符串并输出。

总结

JSONCpp是一个功能强大的C++库,用于解析和生成JSON数据。通过本文,我们介绍了JSONCpp的基本用法,包括如何解析JSON数据、如何访问JSON对象和数组,以及如何生成JSON数据。您可以根据需要查阅JSONCpp的官方文档以获取更多信息。


http://www.kler.cn/a/469467.html

相关文章:

  • “AI智慧语言训练系统:让语言学习变得更简单有趣
  • 【连续学习之LwM算法】2019年CVPR顶会论文:Learning without memorizing
  • Allure 集成 pytest
  • F#语言的网络编程
  • IDE和IDEA详解和具体差异
  • vite6+vue3+ts+prettier+eslint9配置前端项目(后台管理系统、移动端H5项目通用配置)
  • 基于 Python Django 的社区爱心养老系统
  • 位置编码--RoPE
  • 单细胞组学大模型(7)--- GenePT,一个可以在本地部署和使用的单细胞转录组大模型
  • 【设计模式-1】软件设计模式概述
  • k8s修改存储目录-介绍
  • Docker 安装Elasticsearch搜索引擎 搜索优化 词库挂载 拼音分词 插件安装
  • Linux 防火墙:守护系统安全的坚固防线
  • 今日头条ip属地根据什么显示?不准确怎么办
  • 渗透测试--Web基础漏洞利用技巧
  • 浅谈棋牌游戏开发流程七:反外挂与安全体系——守护游戏公平与玩家体验
  • C# 设计模式(行为型模式):解释器模式
  • ✅binlog、redolog和undolog区别?
  • 深入理解 WebSocket:实时通信的基础
  • 鸿蒙应用开发(2)
  • Java字符编码与正则表达式深度解析
  • Web Services 简介
  • Colyseus 与 HTTP API 的集成
  • 我的Java-Web进阶--SpringMVC
  • Unity加载CSV配置表
  • 前端同步发送HTTP请求 Ajax、Fetch和Axios实现HTTP同步请求