jsoncpp 使用说明(ubuntu)

1、安装:

sudo apt install -y libjsoncpp-dev

2、配置:

Cmakelist配置:

set(JSONCPP_INCLUDE_DIRS /path/to/jsoncpp/include)

set(JSONCPP_LIBRARIES /path/to/jsoncpp/lib/libjsoncpp.so)

find_package(PkgConfig REQUIRED)

pkg_check_modules(JSONCPP REQUIRED jsoncpp)

include_directories(${JSONCPP_INCLUDE_DIRS})

target_link_libraries(your_executable_name ${JSONCPP_LIBRARIES})

3、使用:

JsonCpp 主要包含三种类型的 class:

Json::Value:可以表示所有支持的类型,如:int , double ,string , object, array等。其包含节点的类型判断(isNull,isBool,isInt,isArray,isMember,isValidIndex等),类型获取(type),类型转换(asInt,asString等),节点获取(get,[]),节点比较(重载<,<=,>,>=,==,!=),节点操作(compare,swap,removeMember,removeindex,append等)等函数。

Json::Reader:将文件流或字符串创解析到Json::Value中,主要使用parse函数。Json::Reader的构造函数还允许用户使用特性Features来自定义Json的严格等级。

Json::Writer:与JsonReader相反,将Json::Value转换成字符串流等,Writer类是一个纯虚类,并不能直接使用。在此我们使用 Json::Writer 的子类:Json::FastWriter(将数据写入一行,没有格式),Json::StyledWriter(按json格式化输出,易于阅读)

4、参考示例:

复制代码
{
  "content": "Hello JsonCpp"}

使用 Reader 和 Value 读取 content 的值:

复制代码
#include <string>
#include <iostream>
#include <json/json.h>

int main(int argc, char const *argv[])
{
  
    std::string str = "{\"content\": \"Hello JsonCpp\"}";

    Json::Reader reader;
    Json::Value root;
    if (reader.parse(str, root))
        std::cout << root["content"].asString() << std::endl;
    
    return 0;
}

调用 Reader.parse() 接口尝试解析 json 字符串 str,当 str 满足 json 格式之后,调用 Value[] 操作符将 "content" 的值取出来,然后再进行类型转换,取出实际的类型数据。

值类型

JsonCpp 支持的值类型总共有 8 种:

enum ValueType Description
0 nullValue 'null' value
1 intValue signed integer value
2 unsigned int unsigned integer value
3 realValue double value
4 stringValue UTF-8 string value
5 booleanValue bool value
6 arrayValue array value (ordered list)
7 objectValue object value (collection of name/value pairs)

类型判断

如果需要进行类型判断,Json::Value 已经提供了完备的类型判断接口供调用:

复制代码
class Value {
  
    ...
    bool isNull() const;
    bool isBool() const;
    bool isInt() const;
    bool isInt64() const;
    bool isUInt() const;
    bool isUInt64() const;
    bool isIntegral() const;
    bool isDouble() const;
    bool isNumeric() const;
    bool isString() const;
    bool ihttps://www.coonote.com/linux/sar-find-bottleneck.htmlray() const;
    bool isObject() const;
    ...
};

其中这里有两个接口比较特殊,一个是 isNumeric() 另一个是 isIntegral()

先对 isNumeric() 进行说明,字面意思就是"是否为数字",实际上在 Json::Value 类的实现中等同于 isDouble(),因此这两个函数是等效的

键值判断

Value.isMember() 接口用于判断 json 字符串中是否存在某个键值,

参考地址:

JsonCpp 使用指导-菜鸟笔记 (coonote.com)

相关推荐
wb1893 分钟前
LVS的集群技术和分布式
运维·笔记·分布式·云计算·lvs
_可乐无糖13 分钟前
用鼠标点击终端窗口的时候出现:0;61;50M0;61;50M0;62;50M0
linux·ssh
特种加菲猫1 小时前
硬件与软件的桥梁:冯诺依曼体系、操作系统和初始进程的深度解析
linux·笔记
云和数据.ChenGuang2 小时前
关闭 GitLab 升级提示的详细方法
运维·自动化·gitlab·es运维
007php0073 小时前
服务器上PHP环境安装与更新版本和扩展(安装PHP、Nginx、Redis、Swoole和OPcache)
运维·服务器·后端·nginx·golang·测试用例·php
冰橙子id6 小时前
linux-远程访问管理(sshd,scp,sftp)
linux·网络·ssh
光电的一只菜鸡7 小时前
ubuntu之坑(十五)——设备树
linux·数据库·ubuntu
saynaihe9 小时前
ubuntu 22.04 anaconda comfyui安装
linux·运维·服务器·ubuntu
鸠摩智首席音效师9 小时前
如何在 Ubuntu 上安装 Microsoft Edge 浏览器?
ubuntu·microsoft·edge
企鹅与蟒蛇9 小时前
Ubuntu-25.04 Wayland桌面环境安装Anaconda3之后无法启动anaconda-navigator问题解决
linux·运维·python·ubuntu·anaconda