json文件结构形式

{
    "xiao1": [
        {
            "000100": {
                "industryCode": "000100",
                "industryName": "test"
            }
        },
        {
            "000101": {
                "industryCode": "000100",
                "industryName": "test"
            }
        },
        {
            "000103": {
                "industryCode": "000100",
                "industryName": "test"
            }
        }
    ],
    "xiaogdsadg": [
        {
            "12321344": {
                "industryCode": "12321344",
                "industryName": "454555"
            }
        },
        {
            "54545445": {
                "industryCode": "54545445",
                "industryName": "454555"
            }
        },
        {
            "454454654": {
                "industryCode": "454454654",
                "industryName": "454555"
            }
        }
    ]
}

//判断指定项是否在json文件里

bool MainWindow:: isInJson(QString userName,QString rowId)
{
    QString val;
    QFile file;
    file.setFileName("F:\\work\\qtProjects\\untitled11\\test123.json");
    file.open(QIODevice::ReadOnly| QIODevice::Text);
    val = file.readAll();
    file.close();
    QJsonDocument doc = QJsonDocument::fromJson(val.toUtf8());
    QJsonObject objTop1 = doc.object();
    QStringList keys = objTop1.keys();
    //用户循环
    for(int i = 0; i < keys.count();i++)
    {
        if(keys.at(i)!= userName)
            continue;
        QJsonArray arrayRows = objTop1.value(keys.at(i)).toArray();
        //行循环
        for(int j =0;j < arrayRows.count();j++)
        {
            QJsonObject objRow = arrayRows.at(j).toObject();
            if(objRow.keys().at(0) == rowId)
            {
                return true;
            }
        }
    }
    return false;
}
//添加收藏
void MainWindow::addJson(QString userName, QString rowId)
{
    if(!isInJson(userName,rowId))
    {
        bool hasUser = false;
        QString val;
        QFile file;
        file.setFileName("F:\\work\\qtProjects\\untitled11\\test123.json");
        file.open(QIODevice::ReadOnly| QIODevice::Text);
        val = file.readAll();
        file.close();
        QJsonDocument doc = QJsonDocument::fromJson(val.toUtf8());
        QJsonObject objTop1 = doc.object();
        QStringList keys = objTop1.keys();
        //用户循环
        for(int i = 0; i < keys.count();i++)
        {
            if(keys.at(i) != userName)
                continue;
            QJsonArray arrayRows = objTop1.value(keys.at(i)).toArray();
            QJsonObject addObj;
            QJsonObject addObj1;
            addObj1.insert("industryCode",rowId);
            addObj1.insert("industryName","454555");
            addObj.insert(rowId,addObj1);
            arrayRows.append(addObj);
            objTop1.insert(userName,arrayRows);
            hasUser = true;
            break;
        }
        //该用户还没有添加
        if(!hasUser)
        {
            QJsonArray arrayRows;
            QJsonObject addObj;
            QJsonObject addObj1;
            addObj1.insert("industryCode",rowId);
            addObj1.insert("industryName","444545");
            addObj.insert(rowId,addObj1);
            arrayRows.append(addObj);
            objTop1.insert(userName,arrayRows);
        }
        doc.setObject(objTop1);
        file.setFileName("F:\\work\\qtProjects\\untitled11\\test123.json");
        file.open(QIODevice::WriteOnly| QIODevice::Text);
        file.write(doc.toJson());
        file.close();
    }
}
//取消收藏
void MainWindow::removeJson(QString userName, QString rowId)
{
    if(isInJson(userName,rowId))
    {
        QString val;
        QFile file;
        file.setFileName("F:\\work\\qtProjects\\untitled11\\test123.json");
        file.open(QIODevice::ReadOnly| QIODevice::Text);
        val = file.readAll();
        file.close();
        QJsonDocument doc = QJsonDocument::fromJson(val.toUtf8());
        QJsonObject objTop1 = doc.object();
        QStringList keys = objTop1.keys();
        //用户循环
        for(int i = 0; i < keys.count();i++)
        {
            if(keys.at(i) != userName)
                continue;
            QJsonArray arrayRows = objTop1.value(keys.at(i)).toArray();
            //行循环
            for(int j =0;j < arrayRows.count();j++)
            {
                QJsonObject objRow = arrayRows.at(j).toObject();
                if(objRow.keys().at(0) == rowId)
                {
                    arrayRows.removeAt(j);
                    objTop1.insert(userName,arrayRows);
                    break;
                }
            }
            doc.setObject(objTop1);
            file.setFileName("F:\\work\\qtProjects\\untitled11\\test123.json");
            file.open(QIODevice::WriteOnly| QIODevice::Text);
            file.write(doc.toJson());
            file.close();
            break;
        }

    }
}

qt json操作的更多相关文章

  1. QT json数据的应用(cJSON)

    json数据可保存小量的数据在本地的json文件中.QT有两种方式操作:(1).cJSON (2).QT的操作json数据的类. 应用:将监控预案数据保存在本地中. 1.首先根据预案结构创建一个jso ...

  2. Qt QAxObject操作excel文件过程总结(转):

    正好同事问道Qt下操作excel. 转自:http://blog.csdn.net/a156392343/article/details/48092515 配制方面: 1.确保Excel软件在本地服务 ...

  3. Json操作(DynamicJson)

    Json的简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了 ...

  4. ASP.NET 里的 JSON操作

    最近项目中需要用到 JSON操作,google了一下 找到了几个比较好的操作方法.... 一 .使用 mircosoft 提供的 .NET Framework 自带的 json操作方法 1. 使用Ja ...

  5. 2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

     Linux下的qt安装,命令时:sudoapt-get install qt-sdk 安装mysql数据库,安装方法參考博客:http://blog.csdn.net/tototuzuoquan ...

  6. Qt之操作系统环境

    来源:http://blog.sina.com.cn/s/blog_a6fb6cc90102uy9k.html Qt中操作系统环境,官方解释如下: QStringList QProcess::syst ...

  7. Newtonsoft.Json 操作 JSON 字符串

    Newtonsoft.Json介绍 在做开发的时候,很多数据交换都是以json格式传输的.而使用Json的时候,我们很多时候会涉及到几个序列化对象的使用:DataContractJsonSeriali ...

  8. Asp.Net Core 2.0 项目实战(8)Core下缓存操作、序列化操作、JSON操作等Helper集合类

    本文目录 1.  前沿 2.CacheHelper基于Microsoft.Extensions.Caching.Memory封装 3.XmlHelper快速操作xml文档 4.Serializatio ...

  9. JavaScript对json操作小记

    JSON是一种轻量级的数据交换格式,同时,JSON是 JavaScript 原生格式,因此我们可以直接处理它不需要依赖任何工具包或者插件.因此,好多后台都会选择返回给前端这种非常友好的数据格式. 引子 ...

随机推荐

  1. JavaWeb_(SSH论坛)_四、页面显示

    基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 帖子表与回复表 ...

  2. jsPDF生成pdf文件和中文编码

    jsPDF的简单使用以及中文编码问题的解决 文中js通过CDN引入,若是为了加载时间最好下载至本地. jsPDF的使用 jsPDF简介 jsPDF 是一个基于 HTML5 的客户端解决方案,用于在客户 ...

  3. 20175215 2018-2019-2 第六周java课程学习总结

    第七章 内部类与异常类 1.内部类 Java支持在一个类中定义另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类 内部类和外嵌类之间重要关系如下 内部类的外嵌类的成员变量在内部类中仍然有 ...

  4. Spark学习(一)——Spark运行架构

    基本概念 在具体讲解Spark运行架构之前,需要先了解几个重要的概念: RDD:是弹性分布式数据集(Resilient Distributed Dataset)的简称,是分布式内存的一个抽象概念,提供 ...

  5. Python学习笔记:字典型的数据结构

    根据书上的定义,字典是将数据与键相关联,这个键相当于是一组数据的一个名称,键必须是唯一的. python中提供了内置的映射类型--字典.映射其实就是一组key和value以及之间的映射函数,其特点是: ...

  6. jquery 四舍五入小数处理总结

    一.jquery中对小数进行取整.四舍五入的方法 1.丢弃小数部分,保留整数部分 parseInt(5/2) =2 2.四舍五入. Math.round(5/2) =3 3.向下取整 Math.flo ...

  7. 使用SNMP监控服务器运行情况

    系统监测的基本概念及分类: a.系统监测的概述: 如何对现有IT架构的整体以及细节运行情况进行科学.系统和高效地监测是目前各企业运维和管理部门一项非常重要的工作内容.随着当前企业IT环境中服务器.应用 ...

  8. vue实现百度下拉框

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. 五一 DAY 3

    DAY 3      2019.4.30 动态规划DP Dp是一个很抽象的东西 方法没有明显区别,很难总结套路 啥是DP? DP等价于DAG!!! (1)无后效性:DP的所有状态之间组成一个DAG ( ...

  10. vue问题三:element ui的upload组件上传图片成功和移除事件

    element ui的upload组件上传图片成功和移除事件: 登录后获取到后台传的token存到中: sessionStorage.setItem("token",data.ob ...