IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> QT中Json与类之间的相互转换 -> 正文阅读

[C++知识库]QT中Json与类之间的相互转换

使用到的QT库:

#include <QJsonObject>
#include <QJsonArray>
#include <QString>
#include <QJsonDocument>
#include <QObject>

假设json的数据为:

{
“name”:“xxx”,
“age”:3,
“langurage”:{
“国籍”:[“中”,“俄”,“土”]
}
}

定义类时,name,age,langurage为类的成员,langurage为类中的类:

#define PropertyBuilderByName(type, name, access_permission)\
    access_permission:\
        type m_##name;\
    public:\
    inline void set##name(type v) {\
        m_##name = v;\
    }\
    inline type get##name() {\
        return m_##name;\
    }\//宏定义,自动生成成员get和set方法

PropertyBuilderByName(QString,name,public)//使用宏定义
PropertyBuilderByName(int,age,public)//使用宏定义

public:
    class Inside
    {
       public:
       Inside(QList<QString> &ss){s=ss;}
         QList<QString> gets() const {return s;}
       private:
       QList<QString> s;
    };
    xxx(QString name,int age,QList<QString> ss);
    Inside getinside()
    {
        return inside;
    }
    QString FormToJson() const;//转化成json
    xxx xxx( const QString &json);//转化成类
private:
    Inside inside;

这里注意一下,由于类中有类,那么我的构造函数就这样写了:

xxx::xxx(QString name,int age ,QList<QString> ss):inside(ss)
{
    setname(name);
    setage(age);
    //inside.s = ss;
}

类转换为json:

QString xxx::FormToJson() const
{
    QJsonObject json;//json类
    json.insert(QStringLiteral("name"), m_name);//json中的属性之一
    json.insert(QStringLiteral("age"), m_name);
    QJsonObject insideObject;       //json中含有json
    QJsonArray ss;    //含有数组
    for (const QString &sinside : inside.gets()) {
            ss.append(sinside);
    }
    insideObject.insert(QStringLiteral("国籍"),ss);//套一层json

    json.insert(QStringLiteral("langurage"),insideObject);

    return QJsonDocument(json).toJson();//转化为qstring
}

json转换为类:

xxx   xxx::formJson( const QString &json)
{
    QJsonParseError error;
    const QJsonDocument document = QJsonDocument::fromJson(json.toUtf8(),&error);//解析json
    if(error.error==QJsonParseError::NoError)//当解析json没有错误时
    {
        const QJsonObject &obj = document.object();

        const QString name = obj.value(QStringLiteral("name")).toString();
        int age = obj.value(QStringLiteral("age")).toInt();

        const QJsonObject &insideObject = obj.value(QStringLiteral("langurage")).toObject();
        QJsonArray array = insideObject.value(QStringLiteral("国籍")).toArray();
        QList<QString> ll;
        for(const QJsonValue &ss : array)
        {
            ll.append(ss.toString());
        }
        return xxx(name,age,ll);

    }
    qDebug()<<"error"<<endl;
    throw error.errorString();
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:12:28  更:2022-02-26 11:15:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:00:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码