Yayin Story Studio logo Yayin Story Studio 项目文档
回到主页 用户手册

Visindigo::Utility::JsonConfig Class

class Visindigo::Utility::JsonConfig

JsonConfig定义了对Json配置的操作. 详情...

头文件: #include <JsonConfig>
自以下版本: Visindigo 0.10.0

公开成员函数

(自 Visindigo 0.13.0 引入) JsonConfig()
(自 Visindigo 0.13.0 引入) JsonConfig(const QJsonDocument &json)
(自 Visindigo 0.13.0 引入) JsonConfig(const QString &jsonStr)
(自 Visindigo 0.13.0 引入) JsonConfig(const QVariant &variant)
(自 Visindigo 0.13.0 引入) JsonConfig(const Visindigo::Utility::JsonConfig &other)
(自 Visindigo 0.13.0 引入) JsonConfig(Visindigo::Utility::JsonConfig &&other)
(自 Visindigo 0.13.0 引入) ~JsonConfig()
(自 Visindigo 0.13.0 引入) void clear()
(自 Visindigo 0.13.0 引入) bool contains(const QString &key) const
(自 Visindigo 0.13.0 引入) QList<Visindigo::Utility::JsonConfig> getArray(const QString &key = "", bool *ok = nullptr) const
(自 Visindigo 0.13.0 引入) bool getBool(const QString &key = "", bool *ok = nullptr) const
(自 Visindigo 0.13.0 引入) double getDouble(const QString &key = "", bool *ok = nullptr) const
(自 Visindigo 0.14.0 引入) QList<double> getDoubleArray(const QString &key = "", bool *ok = nullptr) const
(自 Visindigo 0.13.0 引入) qint64 getInt(const QString &key = "", bool *ok = nullptr) const
(自 Visindigo 0.14.0 引入) QList<qint64> getIntArray(const QString &key = "", bool *ok = nullptr) const
(自 Visindigo 0.13.0 引入) Visindigo::Utility::JsonConfig getObject(const QString &key = "", bool *ok = nullptr) const
(自 Visindigo 0.13.0 引入) QString getString(const QString &key = "", bool *ok = nullptr) const
(自 Visindigo 0.13.0 引入) QStringList getStringList(const QString &key = "", bool *ok = nullptr) const
(自 Visindigo 0.13.0 引入) QJsonValue getValue(const QString &key = "", bool *ok = nullptr) const
(自 Visindigo 0.13.0 引入) bool isArray(const QString &key = "") const
(自 Visindigo 0.13.0 引入) bool isBool(const QString &key = "") const
(自 Visindigo 0.13.0 引入) bool isDouble(const QString &key = "") const
(自 Visindigo 0.13.0 引入) bool isEmpty(const QString &key = "") const
(自 Visindigo 0.13.0 引入) bool isInt(const QString &key = "") const
(自 Visindigo 0.13.0 引入) bool isNull(const QString &key = "") const
(自 Visindigo 0.13.0 引入) bool isObject(const QString &key = "") const
(自 Visindigo 0.13.0 引入) bool isString(const QString &key = "") const
(自 Visindigo 0.13.0 引入) QStringList keys(const QString &key = "") const
(自 Visindigo 0.13.0 引入) QJsonParseError parse(const QString &jsonStr)
(自 Visindigo 0.13.0 引入) bool remove(const QString &key)
(自 Visindigo 0.13.0 引入) void setArray(const QString &key, const QList<Visindigo::Utility::JsonConfig> &value)
(自 Visindigo 0.13.0 引入) void setArray(const QString &key, const QStringList &value)
(自 Visindigo 0.13.0 引入) void setBool(const QString &key, bool value)
(自 Visindigo 0.13.0 引入) void setDouble(const QString &key, double value)
(自 Visindigo 0.14.0 引入) void setDoubleArray(const QString &key, const QList<double> &value)
(自 Visindigo 0.13.0 引入) void setInt(const QString &key, qint64 value)
(自 Visindigo 0.14.0 引入) void setIntArray(const QString &key, const QList<qint64> &value)
(自 Visindigo 0.13.0 引入) void setObject(const QString &key, const Visindigo::Utility::JsonConfig &value)
(自 Visindigo 0.13.0 引入) void setString(const QString &key, const QString &value)
(自 Visindigo 0.13.0 引入) void setStringList(const QString &key, const QStringList &value)
(自 Visindigo 0.13.0 引入) void setValue(const QString &key, const QJsonValue &value)
(自 Visindigo 0.13.0 引入) QString toString(int format)
(自 Visindigo 0.13.0 引入) Visindigo::Utility::JsonConfig &operator=(Visindigo::Utility::JsonConfig &&other)
(自 Visindigo 0.13.0 引入) Visindigo::Utility::JsonConfig &operator=(const Visindigo::Utility::JsonConfig &other)
(自 Visindigo 0.13.0 引入) Visindigo::Utility::JsonValueRef operator[](const QString &key)

静态公开成员

(自 Visindigo 0.13.0 引入) Visindigo::Utility::JsonConfig fromJson(const QString &jsonStr, QJsonParseError *error = nullptr)
(自 Visindigo 0.13.0 引入) Visindigo::Utility::JsonConfig fromMetable(const T &obj)
(自 Visindigo 0.13.0 引入) T toMetable(const QString &jsonStr, bool *ok = nullptr)
(自 Visindigo 0.13.0 引入) T toMetable(const Visindigo::Utility::JsonConfig &config, bool *ok = nullptr)
(自 Visindigo 0.13.0 引入) void writeMetable(T *obj, const QString &jsonStr, bool *ok = nullptr)
(自 Visindigo 0.13.0 引入) void writeMetable(T *obj, const Visindigo::Utility::JsonConfig &config, bool *ok = nullptr)

详细说明

JsonConfig提供对Json配置的读写操作,可以通过此类构建基于Json的配置。 JsonConfig主体上提供的是一套纯动态方式的接口,允许你在运行时动态地访问和修改Json对象的内容, 而不需要事先定义Json对象的结构。 为此,我们规定通过句点 “.” 来访问Json对象的子对象,例如 "parent.child.key" 表示访问Json对象中键为 "parent" 的子对象中的键为 "child" 的子对象中的键为 "key" 的值。

Warning: 这种规定对键名有所限制,即键名不能包含句点。如果Json文档中的键名包含句点, 则行为未定义。

除了动态访问之外,JsonConfig也提供了一些静态函数,允许你将JsonConfig与有Q_OBJECTQ_GADGET的类进行转换——只要它们的成员正确的使用Q_PROPERTY进行了标记即可。 有关这部分内容请详见下文。

由于JsonConfig只是在QtJson设施上进行了一层封装,因此它的性能和QtJson基本相当。

如果你不以明确类型操作这个类,你可能还会需要查看QJsonValueQJsonObjectQVariant 等类型的文档。它们是QtJson和可变类型量的重要套件。

JsonConfig永远不与文件直接读写挂钩,这类里所有涉及传递QString进行构造或 初始化的函数,其语义永远是传递Json字符串本体,而不是文件路径。

与之同理,可以使用toString()函数将Json对象转换为字符串。

不建议使用具有QString的构造函数,是因为此构造函数不会提示Json字符串的解析错误, 且JsonConfig没有提供中途获取解析错误的方法,因此仍然建议只用parse()函数。 但如果你确实希望一步完成构建,建议使用静态成员函数fromJson进行构造,这允许你传递一个 QJsonParseError指针来获取解析错误。

请注意,在对JsonConfig进行设置之后,需要自行使用toString()将其 保存到外部,否则设置的内容将会丢失。这同样发生在使用operator=()赋值操作符 时。

JsonConfig可重入,但不保证线程安全。要从多个线程同时操作一个JsonConfig对象,必须使用外部同步机制。

概念VI_Q_OBJECT和VI_Q_GADGET

VI_Q_OBJECT和VI_Q_GADGET是Visindigo定义的两个位于Visindigo::Utility中的 concept,分别对应具有Q_OBJECT标记和Q_GADGET标记的类。这些类已经被Qt的 元对象编译器添加了元信息,因此JsonConfig可以通过QMetaObject访问其中的 Q_PROPERTY成员,并进行相应的转换。

由于QDoc不能正确标记概念,我们在此处直接给出它们的定义:

template <typename T> concept VI_Q_OBJECT = requires(T t) {
        { t.metaobject() } -> std::same_as<const QMetaObject*>;
};
template <typename T> concept VI_Q_GADGET = requires(T t) {
        { t.qt_check_for_QGADGET_macro() } -> std::same_as<void>;
};

值得注意的是,由于Q_OBJECT删除了类的移动和拷贝构造函数,因此JsonConfig访问 这两种类的方式略有差别。具体来说,二者都可用fromMetable从类转换为JsonConfig。 但对于构造,Q_GADGET用返回值的方式构造,函数为toMetable。而Q_OBJECT需要 用户自己事先构造,然后调用writeMetable并传入指针以完成写入。

下面以一个Q_GADGET为例说明如何使用JsonConfig进行转换: 首先我们定义一个Q_GADGET类,并使用Q_PROPERTY标记其成员:

class MyConfig {
        Q_GADGET
        Q_PROPERTY(int intValue MEMBER intValue)
        Q_PROPERTY(QString stringValue MEMBER stringValue)
public:
        int intValue;
        QString stringValue;
}

然后我们假定存在这样的Json字符串:

QString jsonStr = R"({
        "intValue": 42,
        "stringValue": "Hello, World!"
})";

我们就可以通过fromJson函数将其转换为JsonConfig对象:

MyConfig config = JsonConfig::toMetable<MyConfig>(JsonConfig::fromJson(jsonStr));

如果MyConfig非常不幸的是一个Q_OBJECT类,那么最后一步只需改为:

MyConfig config;
JsonConfig::fromMetable(&config, JsonConfig::fromJson(jsonStr));

另请参阅 Visindigo::Utility::JsonDocument, QJsonObject, and QJsonValue.

成员函数文档

[since Visindigo 0.13.0] JsonConfig::JsonConfig()

VIJsonConfig的默认构造函数

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] JsonConfig::JsonConfig(const QJsonDocument &json)

json 为Json对象。 VIJsonConfig的构造函数

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] JsonConfig::JsonConfig(const QString &jsonStr)

jsonStr 为Json字符串。 VIJsonConfig的构造函数

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] JsonConfig::JsonConfig(const QVariant &variant)

variantQVariant对象。 从QVariant构造一个JsonConfig对象。

这个function 从 Visindigo 0.13.0 开始支持。

[noexcept, since Visindigo 0.13.0] JsonConfig::JsonConfig(const Visindigo::Utility::JsonConfig &other)

other 为VIJsonConfig的另一个实例。 VIJsonConfig的拷贝构造函数

这个function 从 Visindigo 0.13.0 开始支持。

[noexcept, since Visindigo 0.13.0] JsonConfig::JsonConfig(Visindigo::Utility::JsonConfig &&other)

other 为VIJsonConfig的另一个实例。 VIJsonConfig的移动构造函数

这个function 从 Visindigo 0.13.0 开始支持。

[noexcept, since Visindigo 0.13.0] JsonConfig::~JsonConfig()

VIJsonConfig的析构函数

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] void JsonConfig::clear()

清空Json对象的内容。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] bool JsonConfig::contains(const QString &key) const

key 为键。

return 指定Json节点是否为是否包含指定的键。

这个function 从 Visindigo 0.13.0 开始支持。

[static, since Visindigo 0.13.0] Visindigo::Utility::JsonConfig JsonConfig::fromJson(const QString &jsonStr, QJsonParseError *error = nullptr)

jsonStr 为Json字符串。 error 为指向QJsonParseError对象的指针,用于获取解析错误信息。默认为nullptr。 从Json字符串构造一个JsonConfig对象,并返回该对象。如果解析过程中发生错误,可以通过 error 参数获取错误信息。

这个function 从 Visindigo 0.13.0 开始支持。

[static, since Visindigo 0.13.0] template <typename T> Visindigo::Utility::JsonConfig JsonConfig::fromMetable(const T &obj)

obj 为具有Q_GADGETQ_OBJECT标记的类的实例。 从具有Q_GADGETQ_OBJECT标记的类的实例构造一个JsonConfig对象,并返回该对象。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] QList<Visindigo::Utility::JsonConfig> JsonConfig::getArray(const QString &key = "", bool *ok = nullptr) const

key 为键。 ok 为接受是否正常工作的结果指针

return 指定Json节点的数组。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] bool JsonConfig::getBool(const QString &key = "", bool *ok = nullptr) const

key 为键。 ok 为接受是否正常工作的结果指针

return 指定Json节点的布尔值。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] double JsonConfig::getDouble(const QString &key = "", bool *ok = nullptr) const

key 为键。 ok 为接受是否正常工作的结果指针

return 指定Json节点的浮点数值。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.14.0] QList<double> JsonConfig::getDoubleArray(const QString &key = "", bool *ok = nullptr) const

key 为键。 ok 为接受是否正常工作的结果指针

return 指定Json节点的double列表。

这个function 从 Visindigo 0.14.0 开始支持。

[since Visindigo 0.13.0] qint64 JsonConfig::getInt(const QString &key = "", bool *ok = nullptr) const

key 为键。 ok 为接受是否正常工作的结果指针

return 指定Json节点的整数值。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.14.0] QList<qint64> JsonConfig::getIntArray(const QString &key = "", bool *ok = nullptr) const

key 为键。 ok 为接受是否正常工作的结果指针

return 指定Json节点的qint64列表。

这个function 从 Visindigo 0.14.0 开始支持。

[since Visindigo 0.13.0] Visindigo::Utility::JsonConfig JsonConfig::getObject(const QString &key = "", bool *ok = nullptr) const

key 为键。 ok 为接受是否正常工作的结果指针

return 指定Json节点的子对象。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] QString JsonConfig::getString(const QString &key = "", bool *ok = nullptr) const

key 为键。 ok 为接受是否正常工作的结果指针

return 指定Json节点的字符串值。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] QStringList JsonConfig::getStringList(const QString &key = "", bool *ok = nullptr) const

key 为键。 ok 为接受是否正常工作的结果指针

return 指定Json节点的字符串列表。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] QJsonValue JsonConfig::getValue(const QString &key = "", bool *ok = nullptr) const

key 为键。 ok 为接受是否正常工作的结果指针 return 指定Json节点的值。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] bool JsonConfig::isArray(const QString &key = "") const

key 为键。

return 指定Json节点是否为是否为数组。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] bool JsonConfig::isBool(const QString &key = "") const

key 为键。

return 指定Json节点是否为是否为布尔值。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] bool JsonConfig::isDouble(const QString &key = "") const

key 为键。

return 指定Json节点是否为是否为浮点数。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] bool JsonConfig::isEmpty(const QString &key = "") const

key 为键。

return 指定Json节点是否为是否为空。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] bool JsonConfig::isInt(const QString &key = "") const

key 为键。

return 指定Json节点是否为是否为整数。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] bool JsonConfig::isNull(const QString &key = "") const

key 为键。

return 指定Json节点是否为是否为空。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] bool JsonConfig::isObject(const QString &key = "") const

key 为键。

return 指定Json节点是否为是否为对象。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] bool JsonConfig::isString(const QString &key = "") const

key 为键。

return 指定Json节点是否为是否为字符串。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] QStringList JsonConfig::keys(const QString &key = "") const

key 为键。

return 指定Json节点的所有键。(不包括子对象)

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] QJsonParseError JsonConfig::parse(const QString &jsonStr)

jsonStr 为Json字符串。

解析Json字符串。如果解析成功,返回的QJsonParseError的error属性为QJsonParseError::NoError。 并立即覆盖全部原有内容。如果解析失败,返回的QJsonParseError的error属性为相应的错误类型。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] bool JsonConfig::remove(const QString &key)

key 为键。 删除Json对象的键值对。 return 如果成功删除了键值对,返回true;如果没有找到键,返回false。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] void JsonConfig::setArray(const QString &key, const QList<Visindigo::Utility::JsonConfig> &value)

key 为键。 value 为数组。

设置指定Json节点为数组。

这个function 从 Visindigo 0.13.0 开始支持。

另请参阅 isArray().

[since Visindigo 0.13.0] void JsonConfig::setArray(const QString &key, const QStringList &value)

key 为键。 value 为字符串列表。

设置指定Json节点为字符串列表。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] void JsonConfig::setBool(const QString &key, bool value)

key 为键。 value 为布尔值。

设置指定Json节点为布尔值。

这个function 从 Visindigo 0.13.0 开始支持。

另请参阅 isBool().

[since Visindigo 0.13.0] void JsonConfig::setDouble(const QString &key, double value)

key 为键。 value 为浮点数值。

设置指定Json节点为浮点数值。

这个function 从 Visindigo 0.13.0 开始支持。

另请参阅 isDouble().

[since Visindigo 0.14.0] void JsonConfig::setDoubleArray(const QString &key, const QList<double> &value)

key 为键。 value 为浮点数列表。

设置指定Json节点为浮点数列表。

这个function 从 Visindigo 0.14.0 开始支持。

[since Visindigo 0.13.0] void JsonConfig::setInt(const QString &key, qint64 value)

key 为键。 value 为整数值。

设置指定Json节点为整数值。

这个function 从 Visindigo 0.13.0 开始支持。

另请参阅 isInt().

[since Visindigo 0.14.0] void JsonConfig::setIntArray(const QString &key, const QList<qint64> &value)

key 为键。 value 为整数列表。

设置指定Json节点为整数列表。

这个function 从 Visindigo 0.14.0 开始支持。

[since Visindigo 0.13.0] void JsonConfig::setObject(const QString &key, const Visindigo::Utility::JsonConfig &value)

key 为键。 value 为子对象。

设置指定Json节点为子对象。

这个function 从 Visindigo 0.13.0 开始支持。

另请参阅 isObject().

[since Visindigo 0.13.0] void JsonConfig::setString(const QString &key, const QString &value)

key 为键。 value 为字符串值。

设置指定Json节点为字符串值。

这个function 从 Visindigo 0.13.0 开始支持。

另请参阅 isString().

[since Visindigo 0.13.0] void JsonConfig::setStringList(const QString &key, const QStringList &value)

key 为键。 value 为整数列表。

设置指定Json节点为字符串列表。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] void JsonConfig::setValue(const QString &key, const QJsonValue &value)

key 为键。 value 为值。

设置指定Json节点为值。

这个function 从 Visindigo 0.13.0 开始支持。

[static, since Visindigo 0.13.0] template <typename T> T JsonConfig::toMetable(const QString &jsonStr, bool *ok = nullptr)

jsonStr 为Json字符串。 ok 为指向bool类型的指针,用于获取转换是否成功的信息。默认为nullptr。 将Json字符串转换为具有Q_GADGET标记的类的实例,并返回该实例。如果转换过程中发生错误,ok参数将被设置为false。

这个function 从 Visindigo 0.13.0 开始支持。

[static, since Visindigo 0.13.0] template <typename T> T JsonConfig::toMetable(const Visindigo::Utility::JsonConfig &config, bool *ok = nullptr)

configJsonConfig对象。 ok 为指向bool类型的指针,用于获取转换是否成功的信息。默认为nullptr。 将JsonConfig对象转换为具有Q_GADGET标记的类的实例,并返回该实例。如果转换过程中发生错误,ok参数将被设置为false。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] QString JsonConfig::toString(int format)

format 为Json格式。

return 以指定格式将Json对象转换为字符串。

这个function 从 Visindigo 0.13.0 开始支持。

[static, since Visindigo 0.13.0] template <typename T> void JsonConfig::writeMetable(T *obj, const QString &jsonStr, bool *ok = nullptr)

obj 为指向具有Q_OBJECT标记的类的实例的指针。 jsonStr 为Json字符串。 ok 为指向bool类型的指针,用于获取转换是否成功的信息。默认为nullptr。 将Json字符串写入具有Q_OBJECT标记的类的实例中。如果写入过程中发生错误,ok参数将被设置为false。

这个function 从 Visindigo 0.13.0 开始支持。

[static, since Visindigo 0.13.0] template <typename T> void JsonConfig::writeMetable(T *obj, const Visindigo::Utility::JsonConfig &config, bool *ok = nullptr)

obj 为指向具有Q_OBJECT标记的类的实例的指针。 configJsonConfig对象。 ok 为指向bool类型的指针,用于获取转换是否成功的信息。默认为nullptr。 将JsonConfig对象写入具有Q_OBJECT标记的类的实例中。如果写入过程中发生错误,ok参数将被设置为false。

这个function 从 Visindigo 0.13.0 开始支持。

[noexcept, since Visindigo 0.13.0] Visindigo::Utility::JsonConfig &JsonConfig::operator=(Visindigo::Utility::JsonConfig &&other)

other 为VIJsonConfig的另一个实例。 VIJsonConfig的移动操作符

这个function 从 Visindigo 0.13.0 开始支持。

[noexcept, since Visindigo 0.13.0] Visindigo::Utility::JsonConfig &JsonConfig::operator=(const Visindigo::Utility::JsonConfig &other)

other 为VIJsonConfig的另一个实例。 VIJsonConfig的赋值操作符

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] Visindigo::Utility::JsonValueRef JsonConfig::operator[](const QString &key)

key 为键。 一个重载操作符,旨在以类似下标访问的方式访问Json对象,返回一个VIJsonValueRef实例。 此实例支持直接赋值,也可以使用指针操作符访问QJsonValue。此实例还重载了到QJsonValue的 隐式转换,可以直接将其赋值给QJsonValue

这个function 从 Visindigo 0.13.0 开始支持。