searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

JsonCpp的使用方法

2023-09-14 03:49:10
7
0

把结构化数据表示为JavaScript对象的标准格式即JavaScript Object Notation(JSON),通常用于网络传输数据,其格式举例如下。

{
    "a": 1,
    "b": "string",
    "c": [1, 2, 3],
    "d": {
        "d1": 1,
        "d2": "d2string"
    }
}

使用前

JsonCpp库可以从SourceForge下载,将下载的压缩包解压,将“jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\include\json”文件夹和“jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\src\lib_json”文件夹目录下的文件都拷贝到工程,比如在VS工程目录下新建一个Json文件夹将上述文件夹都拷贝进去。

有的教程说要对json_reader.cpp、json_value.cpp和json_writer.cpp,在右键“属性→配置属性→C/C++→预编译头→不使用预编译头”,否则可能出现编译错误,而我的VS2019社区版默认了工程是不使用预编译头。

在用到的cpp里加入:

#include "Json/json/json.h" //“Json/json”对应实际放置的路径

 

再右键项目选择“属性→配置属性→VC++目录→常规→外部包含目录”添加“.\Json”,即可开始使用。如果还是报错无法解析的外部符号,点击VS工程右上角的“显示所有文件”按钮,选择Json文件夹右键点击“包含在项目中”。

 

使用

Json::Value

Json定义的一种值,值的类型有:

enum ValueType
{
    nullValue = 0, ///< 'null' value
    intValue,      ///< signed integer value
    uintValue,     ///< unsigned integer value
    realValue,     ///< double value
    stringValue,   ///< UTF-8 string value
    booleanValue,  ///< bool value
    arrayValue,    ///< array value (ordered list)
    objectValue    ///< object value (collection of name/value pairs).
};

Json::Value如果是intValue等数据类型,常常要转换成其他值,在转换前先用isXXX()判断是否是期望的值,然后用asXXX()转换,比如:

//Json::Value val;
if (val.isString()) //值是否为字符串类型
{
    std::string str = val.asString();
}

Json::Reader

Json解释器,将Json格式的字符串解析到Json::Value对象。

string str = "xxx";        // 必须是写成Json格式的字符串,否则解析失败
Json::Value value;
Json::Reader reader;
if (reader.parse(str, value))//解析成功返回true
{
    // 解析成功要对value做什么
}

Json::FastWriter和Json::StyleWriter

将Json::Value对象转换为Json格式字符串,前者是无格式的字符串,后者是格式化的字符串(比如格式化网站中对字段等进行换行、更方便查看)。

string str;
Json::Value value;
value["exp"] = "JsonCpp的使用方法";

Json::FastWriter fwriter;
str = fwriter.write(value);//str = "{"exp":"JsonCpp的使用方法"}\n"

Json::StyledWriter swriter;
str = swriter.write(value);//str = "{\n   \"exp\" : \"JsonCpp的使用方法\"\n}\n";
str = value.toStyledString();//和上一句效果一样
0条评论
0 / 1000
y****n
4文章数
0粉丝数
y****n
4 文章 | 0 粉丝
原创

JsonCpp的使用方法

2023-09-14 03:49:10
7
0

把结构化数据表示为JavaScript对象的标准格式即JavaScript Object Notation(JSON),通常用于网络传输数据,其格式举例如下。

{
    "a": 1,
    "b": "string",
    "c": [1, 2, 3],
    "d": {
        "d1": 1,
        "d2": "d2string"
    }
}

使用前

JsonCpp库可以从SourceForge下载,将下载的压缩包解压,将“jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\include\json”文件夹和“jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\src\lib_json”文件夹目录下的文件都拷贝到工程,比如在VS工程目录下新建一个Json文件夹将上述文件夹都拷贝进去。

有的教程说要对json_reader.cpp、json_value.cpp和json_writer.cpp,在右键“属性→配置属性→C/C++→预编译头→不使用预编译头”,否则可能出现编译错误,而我的VS2019社区版默认了工程是不使用预编译头。

在用到的cpp里加入:

#include "Json/json/json.h" //“Json/json”对应实际放置的路径

 

再右键项目选择“属性→配置属性→VC++目录→常规→外部包含目录”添加“.\Json”,即可开始使用。如果还是报错无法解析的外部符号,点击VS工程右上角的“显示所有文件”按钮,选择Json文件夹右键点击“包含在项目中”。

 

使用

Json::Value

Json定义的一种值,值的类型有:

enum ValueType
{
    nullValue = 0, ///< 'null' value
    intValue,      ///< signed integer value
    uintValue,     ///< unsigned integer value
    realValue,     ///< double value
    stringValue,   ///< UTF-8 string value
    booleanValue,  ///< bool value
    arrayValue,    ///< array value (ordered list)
    objectValue    ///< object value (collection of name/value pairs).
};

Json::Value如果是intValue等数据类型,常常要转换成其他值,在转换前先用isXXX()判断是否是期望的值,然后用asXXX()转换,比如:

//Json::Value val;
if (val.isString()) //值是否为字符串类型
{
    std::string str = val.asString();
}

Json::Reader

Json解释器,将Json格式的字符串解析到Json::Value对象。

string str = "xxx";        // 必须是写成Json格式的字符串,否则解析失败
Json::Value value;
Json::Reader reader;
if (reader.parse(str, value))//解析成功返回true
{
    // 解析成功要对value做什么
}

Json::FastWriter和Json::StyleWriter

将Json::Value对象转换为Json格式字符串,前者是无格式的字符串,后者是格式化的字符串(比如格式化网站中对字段等进行换行、更方便查看)。

string str;
Json::Value value;
value["exp"] = "JsonCpp的使用方法";

Json::FastWriter fwriter;
str = fwriter.write(value);//str = "{"exp":"JsonCpp的使用方法"}\n"

Json::StyledWriter swriter;
str = swriter.write(value);//str = "{\n   \"exp\" : \"JsonCpp的使用方法\"\n}\n";
str = value.toStyledString();//和上一句效果一样
文章来自个人专栏
叶圳淦
4 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0