QJsonArray、QJsonObject修改值

Qt5的json读取和新建接口都挺方便的,但是对现有文件进行修改,用起来感觉很不方便,pugixml的接口感觉就做的非常好了,下面对修改方法进行一下记录。

示例代码

    //构建测试数据
    QJsonObject json;
    QJsonArray array;
    for(int i = 0; i < 3; i++)
    {
        QJsonObject obj;
        obj.insert("key" + QString::number(i), i);
        array.append(obj);
    }
    json.insert("dat", array);
    //QJsonObject({"dat":[{"key0":0},{"key1":1},{"key2":2}]})
    qDebug() << json;

    //修改原始数据
    for(QJsonArray::Iterator it = array.begin(); it != array.end(); it++)
    {
        QJsonObject obj = it[0].toObject();
        obj.insert("value", it.i);
        it[0] = obj;
    }
    json["dat"] = array;

    //QJsonObject({"dat":[{"key0":0,"value":0},{"key1":1,"value":1},{"key2":2,"value":2}]})
    qDebug() << json;
  • 坑1

这里有个容易出差的地方,如果通过下面的方式得到的object是只读的,所以你修改obj的值,并不能修改array中的值。

QJsonObject obj = array.at(0);
  • 坑2
    需要通过 “QJsonArray::Iterator” 来获取数据的指针,来达到修改的目的,在遍历"QJsonArray"的时候,获取当前元素是用"it[0]",看一下"QJsonArray::Iterator"的函数,我们发现它有两个成员变量"a"和"i",分别指向的是数组的指针和当前数组元素的索引,当"it++"的时候,“i"的值会自增,所以获取当前的值就是用"it[0]”

在这里插入图片描述

  • 坑3
    通过[]获取引用值,从而修改原始值,或者通过=来覆盖原来的值
it[0] = obj;

json["dat"] = array;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值