Qt读写json文件

1.QT-JSON类的简单说明?
2.写入一个json文件?
3.读取一个json文件?

一、QT-JSON类的简单说明?

1,JSON是一种数据交换格式,在互联网广泛使用,有六种基本数据类型,分别是:booldoublestringarrayobjectnull
2,Qt提供了对处理JSON数据的支持,封装了几个类,分别是:QJsonDocument, QJsonObject, QJsonArray, QJsonValue, QJsonParseError, QJsonObject::const_iterator, QJsonObject::iterator。
3,QJsonDocument:读取json文件或者生成json文件。读取json文件通过QJsonDocument::fromJson()将json文件转为QJsonDocument。生成json文件通过toJson()将QJsonDocument转为json文本。
4,QJsonObject:json中一个大括号括起来的内容,就能看做是一个jsonObject对象
5,QJsonArray:json中一个中括号括起来的内容,就能看做是一个jsonArray对象,中括号里面可能只有基本数据类型,也可能是jsonObject对象
6,QJsonValue:json中一个冒号右侧的值就是一个jsonValue对象,这个value可能是一个基本数据类型,也可能是一个jsonObject或jsonArray对象
7,QJsonParseError:用于报告JSON解析期间的错误,我们常在读取json文件时,调用errorString()方法输出报错信息。

二、写入一个json文件?

  {
      "FirstName": "John",
      "LastName": "Doe",
      "Age": 43,
      "Address": {
          "Street": "Downing Street 10",
          "City": "London",
          "Country": "Great Britain"
      },
      "Phone numbers": [
          "+44 1234567",
          "+44 2345678"
      ]
  }

最外面通过大括号括起来,我们可以看做是一个jsonObject对象,因此我们创建一个QJsonObject对象

QJsonObject json_obj;

第2,3,4行都是简单的键值对,因此我们分别创建QJsonValue对象

json_obj.insert("FirstName", QJsonValue("John"));
json_obj.insert("LastName", QJsonValue("Doe"));
json_obj.insert("Age", QJsonValue(43));
//另一种写法------------------------------------------------------------------------------
json_obj["FirstName"] = "John";
json_obj["LastName"] = "Doe";
json_obj["Age"] = 43;

第5行的键值对的值是一个jsonObject对象,因此我们创建一个QJsonObject对象,并插入值

QJsonObject address_obj;
address_obj.insert("Street", QJsonValue("Downing Street 10"));
address_obj.insert("City", QJsonValue("London"));
address_obj.insert("Country", QJsonValue("Great Britain"));
//把address_obj添加到json_obj中
json_obj.insert("Address", QJsonValue(address_obj));    
//冒号右侧的都是jsonValue对象,QJsonValue可以通过jsonObject对象初始化
//另一种写法------------------------------------------------------------------------------
QJsonObject address_obj;
address_obj["Street"] = "Downing Street 10";
address_obj["City"] = "London";
address_obj["Country"] = "Great Britain";
//把address_obj添加到json_obj中
json_obj["Address"] = address_obj;

第10行的键对值的值是一个jsonArray对象,因此我们创建一个QJsonArray对象,并插入值

QJsonArray phonenum_array;
phonenum_array.insert(0, QJsonValue("+44 1234567"));
phonenum_array.insert(1, QJsonValue("+44 2345678"));
//把phonenum_array添加到json_obj中
json_obj.insert("Phone numbers", QJsonValue(phonenum_array));    
//冒号右侧的都是jsonValue对象,QJsonValue可以通过jsonArray对象初始化

此时,我们已经通过json_obj把最外面大括号里面的东西都包含了
生成json文件

QJsonDocument json_document;
json_document.setObject(json_obj);

QFile file("D:/WXDPlatform/1.json");
if(file.open(QIODevice::WriteOnly))
{
    file.write(json_document.toJson());
    file.close();
}

生成一个json文件成功!

三、读取一个json文件?

以下面这个为例,文件名为1.json

  {
      "FirstName": "John",
      "LastName": "Doe",
      "Age": 43,
      "Address": {
          "Street": "Downing Street 10",
          "City": "London",
          "Country": "Great Britain"
      },
      "Phone numbers": [
          "+44 1234567",
          "+44 2345678"
      ]
  }

首先读取这个文件,将其从json文件转为QJsonDocument格式

//1,读取该文件内容
QFile file("D:/WXDPlatform/1.json");
QByteArray ba_json;
if (!file.open(QIODevice::ReadOnly))
{
    qDebug() << "fail to open" << file.fileName();
    return;
}
ba_json = file.readAll();
file.close();

//2,将json文件转为QJsonDocument格式
QJsonParseError json_error;
QJsonDocument json_document = QJsonDocument::fromJson(ba_json, &json_error);
if (json_document.isNull())
{
    qDebug() << json_error.errorString();
    return;
}

观察json内容,最外层是一对大括号,可以转换为一个jsonObject对象

//首先判断json_document是否可以转换为一个object
if(!json_document.isObject())
    return;
//创建json_obj对象
QJsonObject json_obj;
json_obj = json_document.object();

解析第2,3,4行的简单键值对

QString strFirstName = json_obj.value("FirstName").toString();
QString strLastName = json_obj.value("LastName").toString();
int iAge = json_obj.value("Age").toInt();

第5行的值可以转换为一个jsonObject对象

QJsonValue json_value = json_obj.value("Address");
if(!json_value.isObject())
    return;
QJsonObject address_obj = json_value.toObject();

QString strStreet = address_obj .value("Street").toString();
QString strCity = address_obj .value("City").toString();
QString strCountry = address_obj .value("Country").toString();

第10行的值可以转换为一个jsonArray对象

QJsonValue json_value = json_obj.value("Phone numbers");
if(!json_value.isArray())
    return;
QJsonArray address_array = json_value.toArray();

QString strStreet = address_array.at(0).toString();
QString strCity = address_array.at(1).toString();
//另一种写法------------------------------------------------------------------------------
//如果不清楚QJsonArray的数量,可以使用遍历(假设为string)    
QStringList address_list;
for (int i = 0; i < address_array.size(); ++i)
{
    QString address = address_array.at(i).toString();
    address_list.append(address);
}

读取一个json文件完成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值