Qt中内置了一个QJsonDocument类用来处理json文件。并提供一些类来处理json。

类 功能

QJsonArray 封装 JSON数组

QJsonDocument 读写 JSON 文档

QJsonObject 封装 JSON 对象

QJsonObject::iterator 用于遍历QJsonObject的 STL 风格的非 const 遍历器

QJsonParseError 报告 JSON 处理过程中出现的错误

QJsonValue 封装 JSON 值

qt字符串转json

  1. #include <QJsonDocument>
  2. #include <QJsonArray>
  3. #include <QJsonObject>
  4. QJsonDocument qJsonDocumentObj = QJsonDocument::fromJson(baRevDataParam);
  5. QJsonObject qJsonObjs=qJsonDocumentObj.object();
  6. QStringList listKeys =qJsonObjs.keys();
  7. for (QString indexKey:listKeys) {
  8. QJsonValue indexValue = qJsonObjs.value(indexKey);
  9. qDebug() << "" << indexKey << " " << indexValue;
  10. }

json数据的增删改查

取值、 查找、遍历、删除

QJsonObject提供了容器类的基本都有的常规方法,如下:
  1. QJsonObject object({ { "name", "XiaoMing" }, { "age", 15 } });
  2. //是否包含
  3. qDebug() << object.contains("name");
  4. // 取值
  5. qDebug() << object.value("name");
  6. qDebug() << object["name"];
  7. // 查找
  8. qDebug() << object.contains("name");
  9. auto iter = object.find("name");
  10. // 遍历
  11. for (auto iter = object.begin(); iter != object.end(); iter++)
  12. qDebug() << iter.key() << iter.value();
  13. // 删除
  14. object.remove("name");

例子:

  1. QByteArray jsonData = "[{"id":"11", "name":"aaa"},"
  2. "{"id":"22", "name":"bbb"},"
  3. "{"id":"33", "name":"ccc"}]";
  4. QJsonParseError jsonError;
  5. QJsonDocument jsonDoucment = QJsonDocument::fromJson(jsonData, &jsonError);
  6. if(jsonError.error == QJsonParseError::NoError){
  7. if(!(jsonDoucment.isNull()||jsonDoucment.isEmpty())){
  8. QVariantList dataList=jsonDoucment.toVariant().toList();
  9. foreach (QVariant data, dataList) {
  10. QVariantMap dataMap=data.toMap();
  11. qDebug()<<"id:"<<dataMap["id"].toString()<<"name:"<<dataMap["name"].toString();
  12. }
  13. }
  14. }else{
  15. //检查错误类型
  16. qDebug()<<"jsonError:"<<jsonError.errorString();
  17. }