了解QT中使用的QJson

本文详细介绍了JSON作为数据交换格式的基本概念,以及在Qt中使用QJson进行文件读写的具体方法。包括如何创建和写入JSON对象及数组,以及从文件中读取并解析JSON数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();

数据读取并显示如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值