基于Ubuntu的Linux系统安装jsoncpp开发包过程以及基本应用认识

目录

jsoncpp安装过程:

执行以下命令:

powershell 复制代码
sudo apt update
sudo apt install libjsoncpp-dev

有可能出现的问题:

1.如果在执行sudo apt update时出现以下信息

powershell 复制代码
Hit:1 http://mirrors.aliyun.com/ubuntu bionic InRelease
Hit:2 http://mirrors.aliyun.com/ubuntu bionic-security InRelease                                                                              
Hit:3 http://mirrors.aliyun.com/ubuntu bionic-updates InRelease                                                                               
Hit:4 http://mirrors.aliyun.com/ubuntu bionic-proposed InRelease                           
Hit:5 http://mirrors.aliyun.com/ubuntu bionic-backports InRelease                          
Get:6 https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu1804/x86_64  InRelease [1581 B]
Err:6 https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu1804/x86_64  InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A4B469963BF863CC
Ign:7 https://developer.download.nvidia.cn/compute/machine-learning/repos/ubuntu1804/x86_64  InRelease
Hit:8 https://developer.download.nvidia.cn/compute/machine-learning/repos/ubuntu1804/x86_64  Release
Reading package lists... Done
W: GPG error: https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu1804/x86_64  InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A4B469963BF863CC
E: The repository 'https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64  InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

这是一个 GPG 错误,意味着你的系统无法验证 NVIDIA CUDA 软件仓库的签名,可能是因为缺少公钥。可以尝试使用以下步骤解决该问题:

首先获取公钥

可以在 NVIDIA 的官方网站上找到 CUDA 软件仓库的下载链接。以下是 NVIDIA Developer 网站上 Ubuntu 18.04 的 CUDA 软件仓库的下载链接示例:

https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/

在浏览器中打开此链接,并浏览其中的内容,找到 .pub 文件的下载链接。一旦找到 .pub 文件的下载链接,您可以将其复制并用作 apt-key adv --fetch-keys 命令的参数。

通常情况下,.pub 文件包含的是 GPG 公钥。在这种情况下,可以选择任何一个 .pub 文件来获取公钥。

通过以下命令来导入任何一个 .pub 文件中包含的公钥:

powershell 复制代码
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/3bf863cc.pub

之后再执行该命令即可

powershell 复制代码
sudo apt update

然后进行安装jsoncpp

powershell 复制代码
sudo apt install libjsoncpp-dev

之后就可以执行查看

powershell 复制代码
ls /usr/include/jsoncpp/

jsoncpp基本应用认识:

Json::Value类:

json与外界进行数据中转的一个对象类

重载了大量的操作符:赋值运算符

包含了大量的类型转换函数:

Json::Reader类:实现反序列化

将json格式字符串转换为多个数据对象,存储在Json::Value对象中

cpp 复制代码
parse(std::string &buf, Json::Value &val)

Json::Writer类:实现序列化

将Json::Value对象中的数据序列化成为json格式的字符串

基类--子类:Json::FastWriter / Json::StyledWriter

cpp 复制代码
std::string write(Json::Value &val)

举例:

cpp 复制代码
//g++ -std=c++11 json.cpp -o json_test -ljsoncpp
#include<iostream>
#include<string>
#include<jsoncpp/json/json.h>

//json序列化
std::string seria()
{
        const char *name = "张三";
        int id = 10001;
        const char *sex = "男";
        int score[3] = {88, 77, 99};

        Json::Value val;
        val["姓名"] = name;
        val["学号"] = id;
        val["性别"] = sex;
        for(int i = 0; i < 3; i++)
        {
                val["成绩"].append(score[i]);
        }
        Json::StyledWriter writer;
        std::string str = writer.write(val);
        std::cout << str << std::endl;
        return str;
}
//反序列化
void unseria(std::string &str)
{
        Json::Value val;
        Json::Reader reader;
        bool ret = reader.parse(str, val);
        if(ret == false)
        {
                std::cout << "parse json failed!";
                return ;
        }
        std::cout << val["姓名"].asString() << std::endl;
        std::cout << val["性别"].asString() << std::endl;
        std::cout << val["学号"].asInt() << std::endl;
        int num = val["成绩"].size();
        for(int i = 0; i < num; i++)
        {
                std::cout << val["成绩"][i].asInt() << std::endl;
        }
        return ;
}
int main()
{
        std::string str = seria();
        unseria(str);
        return 0;
}
相关推荐
秋风起,再归来~4 分钟前
【Linux庖丁解牛】—进程优先级!
linux·运维·服务器
cosX+sinY23 分钟前
ubuntu 20.04 编译运行lio-sam,并保存为pcd
linux·ubuntu·机器人
Lary_Rock1 小时前
Android 编译问题 prebuilts/clang/host/linux-x86
android·linux·运维
熬夜学编程的小王1 小时前
【Linux篇】理解信号:如何通过信号让程序听从操作系统的指令
linux·信号产生·软件条件产生信号
绵绵细雨中的乡音2 小时前
Linux进程学习【基本认知】
linux·运维·学习
Johny_Zhao2 小时前
MySQL 高可用集群搭建部署
linux·人工智能·mysql·信息安全·云计算·shell·yum源·系统运维·itsm
FREEDOM_X2 小时前
ubuntu20.04 远程桌面Xrdp方式
ubuntu·vmware
珹洺3 小时前
Linux操作系统从入门到实战(三)Linux基础指令(上)
linux·运维·服务器
再睡一夏就好3 小时前
Linux常见工具如yum、vim、gcc、gdb的基本使用,以及编译过程和动静态链接的区别
linux·服务器·c语言·c++·笔记
꧁坚持很酷꧂3 小时前
配置Ubuntu18.04中的Qt Creator为中文(图文详解)
开发语言·qt·ubuntu