• Json介绍,QT解析和生成Json


    目录

    1.Json简介

    2.QT中的Json

    2.1.QJsonObject

    2.1.1.QJsonObject的“增删改查”及遍历

    2.2.QJsonArray

    ​​​​​​​2.2.1.QJsonArray的“增删改查”及遍历

    3.解析Json文件

    4.生成Json文件

    1.Json简介

    Json文件是一种文本文件,常用于轻量级的数据交换,易于人阅读,同时也易于机器解析和生成。

    Json中有两种结构:

    • “键/值”对的集合,在不同的编程语言中,它被理解成:对象(object ,QT C++),记录(record),结构(struct),字典(dictionary),哈希表(hash table)等等。
    • 值的有序列表,在大部分语言中,它被理解成数组(array)。

    而且这两种结构还可以相互嵌套

    2.QT中的Json

    2.1.QJsonObject

    在QT中Json中的“键/值”对集合被理解成一个对象(QJsonObject)。键必须是字符串类型。

    一个对象以左括号开始,右括号结束。每个“键”(key)之后跟一个冒号,冒号后面是对应的值(value)。“键/值”对之间用逗号分隔。下面是一个对象的示例。

    {

            key1:value1,

            key2:value2,

    }

     2.1.1.QJsonObject的“增删改查”及遍历

    QJsonObject  jsonObj;

    //增加键值对

    jsonObj.insert("key1",QJsonValue(1));

    jsonObj.insert("key2",QJsonValue(2));

    jsonObj.insert("key3",QJsonValue(3));

    //根据键查找对应的值

    jsonObj.value("key1");//返回键“key1”对应的值1

    jsonObj.value("key2");//返回键“key2”对应的值2

    jsonObj.value("key3");//返回键“key3”对应的值3

    //改变键原来对应的值

    jsonObj.insert("key1",QJsonValue("change"));//将“key1”对应的值1改为字符串“change”

    //删除键值对

    jsonObj.take("key1");//删除键“key1”的键值对,并返回对应的值

    jsonObj.remove("key2");//删除键“key2”的键值对,无返回值

    //遍历QJsonObject::const_iterator是键值对类型

    //constBegin是第一个键值对,constEnd是最后一个键值对

    for(QJsonObject::const_iterator it=jsonObj.constBegin();it!=jsonObj.constEnd();it++)

    {

            it.key();

            it.value();

    }

    或者

    foreach(QString key, jsonObj.keys())

    {

            qDebug()<

            qDebug()<

    }

    ​​​​​​​2.2.QJsonArray

    数组是值(value)的有序集合,数组以左中括号开始,又中括号结束,值之间用逗号分隔。下面是一个数组的示例。

    [

            value1,

            value2,

    ]

    值可以是字符串、数字、bool值、对象或者数组:

    ​​​​​​​

     

    ​​​​​​​2.2.1.QJsonArray的“增删改查”及遍历

    QJsonArray  jsonArray;

    //在尾部增加值

    jsonArray.append(QJsonValue(1));

    jsonArray.append(QJsonValue(2));

    jsonArray.append(QJsonValue(3));

    //根据索引查找对应的值,索引是从0开始

    jsonArray.at(0);//返回索引0对应的值1,即第一个值

    jsonArray.at(1);//返回索引1对应的值2

    jsonArray.at(2);//返回索引2对应的值3

    //改变键原来对应的值

    jsonArray.insert(0,QJsonValue("change"));//将索引0对应的值1改为字符串“change”

    //删除值

    jsonArray.removeAt(0);//删除索引0对应的值,后面的值向前递补

    //遍历

    for(int i=0;i

    {

            jsonArray.at(i);

    }

    3.解析Json文件

    有一个Json文本,QT要怎么读取并解析呢?这就要用到QJsonDocument数据类型了。

    QJsonDocument  jsonDoc;

    QFile jsonFile("test.json");

    jsonFile.open(QIODevice::ReadOnly);

    QByteArray jsonData=jsonFile.readAll();

    jsonFile.close();

    jsonDoc=QJsonDocument::fromJson(jsonData,NULL);

    //开始解析,解析成QJsonArray 或者QJsonObject 之后就好办了。

    QJsonArray jsonArray;

    QJsonObject jsonObject;

    if(jsonDoc.isArray())

    {

            jsonArray=jsonDoc.array();

    }

    else if(jsonDoc.isObject())

    {

            jsonObject=jsonDoc.object();

    }

    4.生成Json文件

    QFile jsonFile("outJson.json");

    jsonFile.open(QIODevice::ReadWrite);

    //先清空文件

    jsonFile.resize(0);

    //制造jsonObject

    QJsonObject jsonObject;

    jsonObject.insert("School","北京一中");

    jsonObject.insert("Part", "西城区");

    jsonObject.insert("Class", "三年级");

    /制造jsonArray

    QJsonArray jsonArray;

    jsonArray.append(jsonObject);

    QJsonDocument  jsonDoc;

    //将jsonArray作为根节点

    jsonDoc.setArray(jsonArray);

    //或者将jsonObject作为根节点

    jsonDoc.setObject(jsonObject);

    //写入文本

    jsonFile.write(jsonDoc.toJson());

    jsonFile.close();

  • 相关阅读:
    3561-24-8|荧光染料6-fam(Br4)|可作为成像剂
    linux进程间通讯--信号量
    D. Balanced Round
    企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
    【设计模式-04】原型模式
    手把手教你深度学习和实战-----全连接神经网络
    04贪心:最大子序和
    【寒武纪(4)】图像处理硬件加速,基于CNCVE
    餐厅点菜管理系统C语言课程设计
    pair的基本用法总结
  • 原文地址:https://blog.csdn.net/Little_Shrimp/article/details/127746509