qt 修改json数据并重新保存

qt 对于解析和修改json 的支持是挺不错的,相信大家已经看到了很多对于qt 解析json的文章,现在分享一下qt是如何修改json数据的

先看一个json:

{
    "A":{"AA":11},
    "B":[{"BB":["bbb"]}],
    "C":{"CC":["ccc"]}
}

首先是一个大的json对象,以下包含了一个小的对象A,一个数组对象数组B,对象数组C

先将他们解析出来

QByteArray byte;
QFile file(file_path);
if(file.exists()){
        file.open(QIODevice::ReadOnly|QIODevice::Text);
        byte=file.readAll();
        file.close();
    }    
else
    {
        cout<<"openFileError"<<endl;;
    }
QJsonParseError json_error;
QJsonDocument jsonDoc(QJsondocument::fromJson(byte,&json_error));
if(json_error.err!=QJsonParseError::NoError)
    {
        cout<<" json error "<<endl;
    }
QJsonObject rootobj=jsonDoc.object();
//一般需要使用 rootobj.contains(xxx) 判断一下是否存在 这里我们就默认是存在的 。

QJsonObject A_obj=rootobj.value("A").toObject();
A_obj["AA"]=33;

QJsonArray B_array=rootobj.value("B").toArray();
QJsonObject B_Subobj=B_array[0].toObject();
QJsonArray b_array=B_Subobj.value("BB").toArray();
b_array.replace(0,"BBB");
B_Subobj["BB"]=b_array;
B_array.replace(0,B_Subobj);

QJsonObject C_obj=rootobj.value("C").toObject();
QJsonArray c_array=C_obj.value("CC").toArray();
c_array.replace(0,"CCC");
C_obj["CC"]=c_array;

rootobj["A"]=A_obj;
rootobj["B"]=B_array;
rootobj["C"]=C_obj;

QFile file(file_path);
if(file.exists()){
        file.open(QIODevice::WriteOnly|QIODevice::Text);
        jsonDoc.setObject(rootobj);
        file.seek(0);
        file.write(jsonDoc.toJson());
        file.flush();
        file.close();
}

由此就将json修改完成:

{
    "A":{"AA":33},
    "B":[{"BB":["BBB"]}],
    "C":{"CC":["CCC"]}
}

  • 9
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: QT 是一种跨平台的应用程序开发框架,支持多种编程语言,如C++和Python等。JSON(JavaScript Object Notation)是一种常用的数据交换格式,常用于Web开发中数据的传输和存储。 在QT中已经有JSON保存的方式可以通过QJsonDocument类来实现。使用该类可以方便地对JSON数据进行读写操作。下面是一个简单的示例: ```cpp #include <QJsonDocument> #include <QJsonObject> #include <QJsonValue> #include <QFile> #include <QDebug> int main() { // 创建一个JSON对象并添加键对 QJsonObject jsonObj; jsonObj["name"] = "张三"; jsonObj["age"] = 20; jsonObj["gender"] = "男"; // 将JSON对象转换为JSON文档 QJsonDocument jsonDoc(jsonObj); // 将JSON文档保存到文件 QFile file("data.json"); if (file.open(QIODevice::WriteOnly)) { file.write(jsonDoc.toJson()); file.close(); qDebug() << "保存成功"; } else { qDebug() << "保存失败"; } return 0; } ``` 以上代码创建了一个JSON对象,并向其中添加了三个键对。然后使用QJsonDocument将JSON对象转换为JSON文档,再将文档保存到文件中。保存成功后会输出"保存成功",否则输出"保存失败"。 通过以上方式,QT可以方便地将数据保存JSON格式,便于之后的读取和处理。同时,QT还提供了丰富的JSON解析和操作的API,可以灵活地进行JSON数据的处理和使用。 ### 回答2: Qt是一个用于开发跨平台应用程序的框架,它提供了许多方便的工具和库来简化应用程序开发过程。 在Qt中,可以使用QObject类及其派生类来保存和处理JSON数据。QObject类是Qt框架的核心类之一,它提供了信号和槽机制,用于实现对象之间的通信。 要保存JSON,我们可以使用QJsonDocument类。QJsonDocument类提供了将JSON数据转换为Qt所支持的数据类型(如QVariant、QList和QMap)以及将Qt数据类型转换为JSON的功能。 下面是一个使用Qt保存JSON的示例: ```cpp #include <QJsonDocument> #include <QJsonObject> #include <QJsonValue> int main() { // 创建一个JSON对象 QJsonObject jsonObject; jsonObject["name"] = "Alice"; jsonObject["age"] = 25; // 创建一个JSON文档并将JSON对象保存到文档中 QJsonDocument jsonDocument(jsonObject); // 将JSON文档转换为字符串 QString jsonString = jsonDocument.toJson(); // 输出JSON字符串 qDebug() << jsonString; return 0; } ``` 在上述示例中,我们首先创建了一个QJsonObject对象,然后向其中添加了两个键对,分别表示姓名和年龄。接下来,我们创建了一个QJsonDocument对象,并将QJsonObject保存到其中。最后,我们使用toJson()函数将QJsonDocument对象转换为字符串,并通过qDebug输出。 使用上述方式,我们可以将JSON保存为字符串,方便在需要的时候进行读取和传输。当需要从字符串中读取JSON时,我们可以使用QJsonDocument的fromJson()函数将字符串转换为QJsonDocument对象,然后使用toVariant()、toObject()等函数将其转换为Qt所支持的数据类型。 ### 回答3: Qt是一个跨平台的C++图形用户界面应用程序开发框架。在Qt中,我们可以使用Json保存和读取。 首先,我们需要包含QtJson类库头文件: ```c++ #include <QJsonDocument> #include <QJsonObject> #include <QJsonArray> #include <QDebug> ``` 假设我们已经有一个Json字符串,可以通过如下方式将其转换为Json对象: ```c++ QString jsonString = "{\"name\":\"Tom\", \"age\":20}"; QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString.toUtf8()); QJsonObject jsonObj = jsonDoc.object(); ``` 现在,我们已经获取到了Json对象,可以通过指定的键来获取对应的: ```c++ QString name = jsonObj["name"].toString(); // 获取"Tom" int age = jsonObj["age"].toInt(); // 获取20 ``` 如果我们想要修改保存Json,可以这样做: ```c++ jsonObj["age"] = 21; // 修改age的为21 ``` 最后,我们可以将更新后的Json对象转换为字符串,用于保存或传输: ```c++ jsonDoc.setObject(jsonObj); QString newJsonString = jsonDoc.toJson(QJsonDocument::Compact); qDebug() << newJsonString; // 输出:{"name":"Tom","age":21} ``` 总之,Qt提供了丰富的Json类库,可以方便地保存和读取。我们只需将Json字符串转换为Json对象,然后通过键来获取或修改对应的,最后再将更新后的Json对象转换为字符串即可。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值