0
点赞
收藏
分享

微信扫一扫

二、使用 QJson 解析 json 数据

Soy丶sauce 2022-06-21 阅读 39

如何获取并编译 QJson,参见我前面文章 一、编译QJson(避免采坑教程)​,下面只讲使用,案例如下:
Person

#person.h

#ifndef PERSON_H
#define PERSON_H

#include <QObject>
#include <QDate>

class Person : public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ name WRITE setName)
Q_PROPERTY(int phoneNumber READ phoneNumber WRITE setPhoneNumber)
Q_PROPERTY(Gender gender READ gender WRITE setGender)
Q_PROPERTY(QDate brithday READ brithday WRITE setBrithday)
Q_ENUMS(Gender)

public:
explicit Person(QObject *parent = nullptr);
~Person();

QString name() const;
void setName(const QString& name);

/**
* const:该函数为只读函数,不容许修改成员变量的值
*/
int phoneNumber() const;
void setPhoneNumber(const int phoneNumber);

enum Gender {Male, Female};
void setGender(Gender gender);
Gender gender() const;

QDate brithday() const;
void setBrithday(const QDate& dob);
private:
QString m_name;
int m_phoneNumber;
Gender m_gender;
QDate m_dob;
};

#endif // PERSON_H

-----------------------------------------------

#person.cpp

#include "person.h"

Person::Person(QObject *parent) : QObject(parent)
{

}

Person::~Person()
{

}

QString Person::name() const
{
return m_name;
}

void Person::setName(const QString &name)
{
m_name = name;
}

int Person::phoneNumber() const
{
return m_phoneNumber;
}

void Person::setPhoneNumber(const int phoneNumber)
{
m_phoneNumber = phoneNumber;
}

void Person::setGender(Person::Gender gender)
{
m_gender = gender;
}

Person::Gender Person::gender() const
{
return m_gender;
}

QDate Person::brithday() const
{
return m_dob;
}

void Person::setBrithday(const QDate &dob)
{
m_dob = dob;
}

使用

/**
* @brief Json 转成 QVariant对象
*/
void Widget::testJsonToVariant()
{
QJson::Parser parser;
bool ok;
QString json("{"
"\"encoding\" : \"UTF-8\","
"\"plug-ins\" : ["
"\"python\","
"\"c++\","
"\"ruby\""
"],"
"\"indent\" : { \"length\" : 3, \"use_space\" : true }"
"}");
QVariantMap result = parser.parse(json.toUtf8(), &ok).toMap();
if (!ok) {
qFatal("An error occurred during parsing");
exit (1);
}
qDebug() << "encoding:" << result["encoding"].toString();
qDebug() << "plugins:";
foreach (QVariant plugin, result["plug-ins"].toList()) {
qDebug() << "\t-" << plugin.toString();
}
QVariantMap nestedMap = result["indent"].toMap();
qDebug() << "length:" << nestedMap["length"].toInt();
qDebug() << "use_space:" << nestedMap["use_space"].toBool();
}
/**
* @brief QVariant 转成 Json 对象
*/
void Widget::testVariantToJson()
{
QVariantList peoples;

QVariantMap bob;
bob.insert("name", "bob");
bob.insert("age", "21");

QVariantMap alice;
alice.insert("name", "alice");
alice.insert("age", "23");

peoples << bob << alice;

QJson::Serializer serializer;
bool ok = false;
QByteArray jsonArr = serializer.serialize(peoples, &ok);
if (ok)
qDebug() << jsonArr;
else
qCritical() << "Something went wrong:" << serializer.errorMessage();
}

/**
* @brief QObject 转成 Json
*/
void Widget::testPerson2Json()
{
Person person;
person.setName("bob");
person.setGender(Person::Male);
person.setPhoneNumber(14751087620);
person.setBrithday(QDate(1993, 6, 10));

QVariantMap variant = QJson::QObjectHelper::qobject2qvariant(&person);
QJson::Serializer serializer;
qDebug() << serializer.serialize(variant);
}
/**
* @brief Json 转成 QObject
*/
void Widget::testJson2Person()
{
bool ok = false;
QString json = "{ \"brithday\" : \"1993-06-10\", \"gender\" : 0, \"name\" : \"bob\", \"phoneNumber\" : 1866185732 }";
QJson::Parser parser;
QVariant variant = parser.parse(json.toUtf8(), &ok);
Person person;
QJson::QObjectHelper::qvariant2qobject(variant.toMap(), &person);
qDebug() << person.name();
}


举报

相关推荐

0 条评论