了解QT中使用的QJson

    技术2026-03-01  10

    JSON——“JavaScript Object Notation”——JS对象简谱

    这是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。

    JSON 与 JS 对象的关系: JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。 如: var obj = {a: 'Hello', b: 'World'}; //这是一个JS对象,注意键名也是可以使用引号包裹的 var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串

    ~··· 以上来源于: https://baike.baidu.com/item/JSON/2462549?fr=aladdin ~···

    QJson写文件 两种方式

    其一

    QFile f(path); if(!f.open(QIODevice::ReadWrite)) //打开文件,读写方式 return 0; QJsonObject obj; //创建一个对象,输入key,value obj.insert("name","zhangsan"); obj.insert("age","21"); obj.insert("place","nanjing"); obj.insert("time",QTime::currentTime().toString()); QJsonDocument document; //创建文件,设置对象 document.setObject(obj); f.write(document.toJson()); //写入对象 f.close(); //关闭文件

    这时候你会发现,输入的数据不按顺序的。如下图:

    所以可以使用 其二 QJsonArray。用法如上相同

    QFile f(path); if(!f.open(QIODevice::ReadWrite)) return 0; // QJsonObject obj; // obj.insert("name","zhangsan"); // obj.insert("age","21"); // obj.insert("place","nanjing"); // obj.insert("time",QTime::currentTime().toString()); QJsonArray array; array.append("zhangsan"); array.append(21); array.append("nanjing"); array.append(QTime::currentTime().toString()); QJsonDocument document; // document.setObject(obj); document.setArray(array); f.write(document.toJson()); f.close();

    结果如下:

    如果需要QJSonObject的顺序样式,可以使用array.append(obj);实现

    QJsonObject obj; obj.insert("name","zhangsan"); obj.insert("age","21"); obj.insert("place","nanjing"); obj.insert("time",QTime::currentTime().toString()); QJsonArray array; array.append(obj); QJsonDocument document; document.setArray(array); file.write(document.toJson()); 读文件 to QString 很简单 QFile f(path); if(!f.open(QIODevice::ReadOnly)) //打开文件 只读方式 return 0; QString str = f.readAll(); //读取全部 f.close(); //关闭文件 qDebug() << str; 读文件 to QVariantMap QFile f(path); if(!f.open(QIODevice::ReadOnly)) return 0; QJsonParseError error; //定义一个错误返回值容器 QJsonDocument document = QJsonDocument::fromJson(f.readAll(),&error); //定义Json文件读取文件,并将错误返回给error if(error.error != QJsonParseError::NoError) //判断是否有错 { qDebug() << "write error!"; return 1; } if((document.isNull() || document.isEmpty()) && !document.isObject()) //判断documen是否可用 { qDebug() << "document is none"; return 0; } QVariantMap map = document.toVariant().toMap(); //将QJsondocument转为QVariantMap型 QVariantMap::const_iterator aaa; //定义QVariantMap操作对象,遍历输出 for(aaa = map.constBegin(); aaa != map.constEnd(); aaa++) qDebug() << aaa.key() << "---" << aaa.value(); aaa = map.find("time"); //寻找key值为time的数据 qDebug() << aaa.value().toString(); //将value的QVariant输出转为QString类型 f.close();

    数据读取并显示如下:

    Processed: 0.019, SQL: 9