解析json
1. 使用QVariantMap/QVariantList一次性获取键值
2. 使用key1.key2.key3……一层层获取值
步骤
- 字符串转json文档:QJsonDocument::fromJson
- 对象是什么类型:isNull()/isObject()/isArray()
- 转为对象或数组:toObject()/toArray()
- QJsonObject对象获取json值
是否包含键:contains(“key”)
转QJsonValue:value(“key”)或object[“key”] - 获取具体值
判断类型:isNull()/isObject()/isString()/isDouble()
QJsonValue转QJsonArray:toArray()
QJsonValue转QJsonObject:toObject()
QJsonValue转Qstring:toString()
QJsonValue转Qvariant:toVariant() - 遍历数组
QJsonArray array;
foreach (const QJsonValue &i, array) {
qDebug << toVariant();
}
生成json字符串
QString get_json(const QVariantMap &map)
{
QJsonDocument jsonDocument = QJsonDocument::fromVariant(map);
if (!jsonDocument.isNull())
{
return jsonDocument.toJson();
}
return "{}";
}
QString get_json(const QVariantList &li)
{
QJsonDocument jsonDocument = QJsonDocument::fromVariant(li);
if (!jsonDocument.isNull())
{
return jsonDocument.toJson();
}
return "{}";
}
json文档
int read_json_file(const QString &fileName, QJsonObject &root) {
int res = -1;
if (QFile::exists(fileName)) {
QFile file(fileName);
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
QByteArray json = file.readAll();
QJsonParseError error;
QJsonDocument jsonDocument = QJsonDocument::fromJson(json, &error);
root = jsonDocument.object();
if (QJsonParseError::NoError == error.error) {
res = 0;
} else {
qDebug() << error.errorString() << ", Offset: " << error.offset;
}
file.close();
}
}
return res;
}
int write_json_file(const QString &fileName, const QString &jsonStr) {
int len = -1;
QByteArray json = jsonStr.toUtf8();
QFile file(fileName);
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
len = file.write(json);
file.flush();
file.close();
}
return 0;
}