如何获取并编译 QJson,参见我前面文章 一、编译QJson(避免采坑教程),下面只讲使用,案例如下:
Person
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;
};
// 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();
}