qt怎么解析json的字段和值对?

如json编译器一样解析,{"name": "qt"} 怎么解析的出name: qt ? 不是只有值对qt,干了两天都没找到资料,感激不尽了。
关注者
5
被浏览
2,097

2 个回答

你可能没有看到QJsonDocument。

它提供了一个静态的方法用于从字节流(QByteArray)导入成为QJsonDocument对象,然后再根据Json的类型来使用object()或者array()来取对应的对象。

QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error = nullptr)

注:QString可以直接转成QByteArray,请查看文档。

Qt的文档做得很好,建议仔细阅读。

void saveHashToFile(QVariantHash &data, QString wFile)

{

QJsonObject jsonObj=QJsonObject::fromVariantHash(data);

QJsonDocument jsonDoc;

jsonDoc.setObject(jsonObj);

QByteArray writeAryy = jsonDoc.toJson(QJsonDocument::Indented);

QFile file(wFile);

QFileInfo info(file);

QString path=info.absoluteDir().absolutePath();

QDir dir=info.absoluteDir();

if(dir.exists()==false)

dir.mkpath(path);

file.open (QIODevice::ReadWrite|QIODevice::Text);

file.resize(0);

file.write(writeAryy);

file.flush();

file.close();

}

QVariantHash readFromJsonFile(QString file,bool &isOK)

{

if(QFile::exists(file))

{

QFile jsonFile(file);

jsonFile.open (QIODevice::ReadOnly|QIODevice::Text);

QByteArray jsonArry=jsonFile.readAll();

QJsonParseError jsonError;

QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonArry, &jsonError);

jsonFile.flush();

jsonFile.close();

if(jsonError.error == QJsonParseError::NoError)

{

isOK=true;

return jsonDoc.object().toVariantHash();

}

else

{

isOK=false;

qDebug()<<"load json set file,decode json error ,file name: "<<file<<jsonError.errorString();

return QVariantHash();

}

}

else

{

isOK=false;

qDebug()<<"load json set file false ,file not exist, file name:"<<file;

return QVariantHash();

}


}