jsoncpp的环境配置与使用C++

JSONcpp

开发环境配置

现成版百度网盘

jsoncpp现成配置环境VS2022开发环境x64

链接:https://pan.baidu.com/s/1-DjqbRVVSmDizcD8wbEGFg?pwd=5213 提取码:5213

环境配置版

下载Jsoncpp
git clone https://github.com/open-source-parsers/jsoncpp
cmake进行编译
下载cmake

cmake下载链接1
cmake下载文件

解析出动态
  • 安装cmake默认安装即可
  • jsoncpp所在文件夹,以及生成jsoncpp.dll和jsoncpp.lib`等动态文件的文件夹
    填入jsoncpp文件夹
  • 第一个为VS的版本,第二个默认x64不用填
    版本配置

  • 配置不动,点击生成即可,会发现生成文件逐步完成
    生成

  • 打开生成文件的项目
    打开生成文件的项目

  • jsoncpp_dll设置为启动项,并右键点击第一个生成即可完成静态文件的生成
    静态文件生成

  • 可以在C盘新建一个存放环境的位置cpp
  • 将下载clone的jsoncpp文件下的include文件全部放入C盘文件夹cpp中(此文件为jsoncpp的头文件)
  • 将生成文件之后项目文件夹中bin\Debug下的jsoncpp.dll复制到C盘文件夹cpp下与include同级lib文件夹(自己创建)下
  • 将生成文件之后项目文件加中lib\Debug下的jsoncpp.lib复制到C盘cpp文件夹lib文件下下
    文件夹

VS2022环境配置
  • 右键点击项目进入属性配置
    VS配置jsoncpp

VS配置jsoncpp


最后配置

运行下面的实例代码很可能出现“运行程序无法启动的问题”,将(刚才C盘中)jsoncpp.dll文件复制到main.cpp对应的资源文件夹下即可
VS运行最后配置

实例代码

#include <json/json.h>
#include <fstream> 
#include <iostream>
using namespace std;
using namespace Json;

//对于Json数组而言,内部的顺序是有序的,这个顺序就是添加数据的顺序
void writeJson()
{
    //定义Value对象
    Value root;
    //使用append方法向Value包装器li填充数据
    root.append("luffy");
    root.append(19);
    root.append(170);
    root.append(false);

    //又定义一个subArray的Value对象
    Value subArray;
    subArray.append("ace");
    subArray.append("sabo");
    //将subArray对象增加到root里面
    root.append(subArray);

    Value obj;
    //定义键值对
    obj["sex"] = "man";
    obj["girlfriend"] = "Hancock";
    //将obj对象的键值对增加到root里面
    root.append(obj);
#if 1
    //对上面数据格式序列化使用toStyledString方法得到带格式的字符串
    string json = root.toStyledString();
#else
    //得到不带格式的字符串
    FastWriter w;
    //通过write方法得到不带换行符的字符串   
    string json = w.write(root);
#endif
    //写文件
    //write  ->  ostream 
    //read   ->  ifstream   
    //将json数据写入test.json
    ofstream ofs("test.json");
    //写入格式化后带格式的字符串
    ofs << json;
    //关闭文件
    ofs.close();
}
/*保存到的json数据
[
    "luffy",
    19,
    170,
    false,
    [
        "ace",
        "sabo"
    ],
    {
        "girlfriend" : "Hancock",
        "sex" : "man"
    }
]
*/

void readJson()
{
    //读,打开test.json
    ifstream ifs("test.json");
    Reader rd;
    Value root;
    //将json数据解析到root里面
    rd.parse(ifs, root);
    //判断解析的root value类是否是Array
    if (root.isArray())
    {
        //size方法判断
        for (unsigned i = 0; i < root.size(); ++i)
        {
            Value item = root[i];
            //对类型进行判断,并对对应的类型进行输出
            if (item.isInt())
            {
                cout << item.asInt() << " ,";
            }
            else if (item.isString())
            {
                cout << item.asString() << " ,";
            }
            else if (item.isBool())
            {
                cout << item.asBool() << " ,";
            }
            else if (item.isArray())
            {
                for (unsigned j = 0; j < item.size(); ++j)
                {
                    cout << item[j].asString() << ", ";
                }
            }
            else if (item.isObject())
            {
                //Return a list of the member names.
                Value::Members keys = item.getMemberNames();
                for (int k = 0; k < keys.size(); ++k)
                {
                    cout << keys.at(k) << "," << item[keys[k]];
                }
            }
            cout << endl;
        }
    }
}

int main()
{
    writeJson();
    printf("json写入完毕");
    readJson();
   

    return 0;
}

具体用法

声明命名空间

using namespace Json;

jsoncpp的三个类

Value类

Value类:封装Json支持的所有类型,方便后序处理数据

Value检测类型

使用Value.isNull()判断是够为空,输出bool值

  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 isArray() const;
  bool isObject() const;
Value转换为对应类型
  Int asInt() const;
  UInt asUInt() const;
#if defined(JSON_HAS_INT64)
  Int64 asInt64() const;
  UInt64 asUInt64() const;
#endif // if defined(JSON_HAS_INT64)
  LargestInt asLargestInt() const;
  LargestUInt asLargestUInt() const;
  float asFloat() const;
  double asDouble() const;
  bool asBool() const;
FastWriter类

Value对象中的数据序列化为字符串

std::string Json::FastWriter::write(const Value& root);
  • 将数据格式化,不带换行符,编程单行
Reader类

反序列化,将json字符串解析为Value类型

parse方法
bool Json::Reader::parse(const std::string& decument,Value& root,bool collectComments=true);

参数:

  • document:json格式字符串,打开的json文件
  • root:传出参数,存储了json字符串解析出的数据
  • collectComments:是否保存注释信息,默认True
 bool parse(const char* beginDoc, const char* endDoc, Value& root,bool collectComments = true);

参数:

  • bneginDoc和endDoc指针定位json字符串,解析部分json字符串
  //brief Parse from input stream.
  //see Json::operator>>(std::istream&, Json::Value&).
bool parse(IStream& is, Value& root, bool collectComments = true);

omments = true);

参数:
* bneginDoc和endDoc`指针定位`json字符串,解析`部分`json字符串
```cpp
  //brief Parse from input stream.
  //see Json::operator>>(std::istream&, Json::Value&).
bool parse(IStream& is, Value& root, bool collectComments = true);

  1. https://cmake.org/download/ ↩︎

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值