当前位置:首页 » 《关注互联网》 » 正文

[C++][第三方库][jsoncpp]详细讲解

19 人参与  2024年10月14日 15:21  分类 : 《关注互联网》  评论

点击全文阅读


目录

1.介绍2.jsoncpp3.使用1.main.cc2.序列化3.反序列化


1.介绍

json是一种数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据json数据类型:对象、数组、字符串、数字 对象:使用{}括起来的表示一个对象数组:使用[]括起来的表示一个数组字符串:使用""括起来的表示一个字符串数字:包括整形和浮点型,直接使用

2.jsoncpp

jsoncpp库用于实现json格式的序列化和反序列化,完成将多个数据对象组织成为格式字符串解析得到多个数据对象的功能主要借助三个类以及其对应的少量成员函数完成
// Json数据对象类 -> 用于进行中间数据存储class Json::Value{// Value重载了[]和=,因此所有的赋值和获取数据都可以通过[]实现Value &operator=(const Value &other);// 简单的方式完成 val["姓名"] = "SnowK";Value& operator[](const std::string& key);Value& operator[](const char* key);// 移除元素Value removeMember(const char* key);// val["成绩"][0]const Value& operator[](ArrayIndex index) const; // 添加数组元素val["成绩"].append(88); Value& append(const Value& value);// 获取数组元素个数 val["成绩"].size();ArrayIndex size() const;// 转string   string name = val["name"].asString();std::string asString() const;// 转char*   char *name = val["name"].asCString();const char* asCString() const;// 转int  int age = val["age"].asInt();int asInt() const;              // 转floatfloat asFloat() const;// 转 boolbool asBool() const;};//json序列化类,低版本用这个更简单class JSON_API Writer {virtual std::string write(const Value& root) = 0;}class JSON_API FastWriter : public Writer {virtual std::string write(const Value& root);}class JSON_API StyledWriter : public Writer {virtual std::string write(const Value& root);}//json 序列化类,高版本推荐,如果用低版本的接口可能会有警告class JSON_API StreamWriter {virtual int write(Value const& root, std::ostream* sout) = 0;}class JSON_API StreamWriterBuilder : public StreamWriter::Factory {virtual StreamWriter* newStreamWriter() const;}// json反序列化类,低版本用起来更简单class JSON_API Reader {bool parse(const std::string& document,    Value& root, bool collectComments = true);}// json反序列化类,高版本更推荐class JSON_API CharReader {virtual bool parse(char const* beginDoc, char const* endDoc,    Value* root, std::string* errs) = 0;}class JSON_API CharReaderBuilder : public CharReader::Factory {virtual CharReader* newCharReader() const;}

3.使用

1.main.cc

int main(){    char name[] = "SnowK";    int age = 18;    float score[3] = {100, 99, 98};    Json::Value stu;    stu["Name"] = name;    stu["Age"] = age;    stu["Score"].append(score[0]);    stu["Score"].append(score[1]);    stu["Score"].append(score[2]);    std::string str;    if(Serialize(stu, str) == false)    {        return -1;    }    std::cout << str << std::endl;    std::cout << "-------------------------------" << std::endl;    Json::Value val;    if(UnSerialize(str, val) == false)    {        return -1;    }    std::cout << val["Name"].asString() << std::endl;    std::cout << val["Age"].asInt() << std::endl;    for (int i = 0; i < val["Score"].size(); i++)    {        std::cout << val["Score"][i].asInt() << std::endl;    }    return 0;}

2.序列化

bool Serialize(const Json::Value &val, std::string &dest){    // 由Json::StreamWriterBuilder生产出Json::StreamWriter    Json::StreamWriterBuilder swb;    std::unique_ptr<Json::StreamWriter> sw(swb.newStreamWriter());    // 通过Json::StreamWrite的write()进行序列化    std::stringstream ss;    if (sw->write(val, &ss) != 0)    {        std::cout << "Json序列化失败" << std::endl;        return false;    }    dest = ss.str();    return true;}

3.反序列化

bool UnSerialize(const std::string &src, Json::Value &val){    Json::CharReaderBuilder crb;    std::unique_ptr<Json::CharReader> cr(crb.newCharReader());    std::string err;    if (cr->parse(src.c_str(), src.c_str() + src.size(), &val, &err) == false)    {        std::cout << "json反序列化失败: " << err << std::endl;        return false;    }    return true;}

点击全文阅读


本文链接:http://m.zhangshiyu.com/post/171721.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 祖母寿宴,侯府冒牌嫡女被打脸了(沈屿安秦秀婉)阅读 -
  • 《雕花锦年,昭都旧梦》(裴辞鹤昭都)完结版小说全文免费阅读_最新热门小说《雕花锦年,昭都旧梦》(裴辞鹤昭都) -
  • 郊区41号(许洛竹王云云)完整版免费阅读_最新全本小说郊区41号(许洛竹王云云) -
  • 负我情深几许(白诗茵陆司宴)完结版小说阅读_最热门小说排行榜负我情深几许白诗茵陆司宴 -
  • 九胞胎孕妇赖上我萱萱蓉蓉免费阅读全文_免费小说在线看九胞胎孕妇赖上我萱萱蓉蓉 -
  • 为保白月光,侯爷拿我抵了债(谢景安花田)小说完结版_完结版小说全文免费阅读为保白月光,侯爷拿我抵了债谢景安花田 -
  • 陆望程映川上官硕《我的阿爹是带攻略系统的替身》最新章节阅读_(我的阿爹是带攻略系统的替身)全章节免费在线阅读陆望程映川上官硕
  • 郑雅琴魏旭明免费阅读_郑雅琴魏旭明小说全文阅读笔趣阁
  • 头条热门小说《乔书意贺宴临(乔书意贺宴临)》乔书意贺宴临(全集完整小说大结局)全文阅读笔趣阁
  • 完结好看小说跨年夜,老婆初恋送儿子故意出车祸_沈月柔林瀚枫完结的小说免费阅读推荐
  • 热推《郑雅琴魏旭明》郑雅琴魏旭明~小说全文阅读~完本【已完结】笔趣阁
  • 《你的遗憾与我无关》宋怀川冯洛洛无弹窗小说免费阅读_免费小说大全《你的遗憾与我无关》宋怀川冯洛洛 -

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1