当前位置:   article > 正文

【JSON文件解析】JSON文件

json文件解析

概要:本期主要介绍Qt解析JSON数据格式文件的方式。

一、JSON数据格式

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写,可以在多种语言之间进行数据交换。同时也易于机器解析和生成。相对于Xml数据格式,有更好的可读性,并且在网络传输中有更好的传输效率

1.JSON类似于XML,在JSON文件中,==有且只有一个根节点

2.JSON有两种主流包含型构造字符:{对象}、[数组]

3.JSON的值主要包括:对象、数组、数字、字符串以及三种字面值(ture、fasle、null)

4.JOSN中的对象和数组是可以互相作为对方的子元素,形成复杂的嵌套结构,可以表达出完整的流程。

二、Qt中对于JSON数据格式的处理

Qt5之后,新增了对JSON数据格式的解析类:QJsonDocument、QJsonObject、QJsonArrary、QJsonValue
在这里插入图片描述

1.QJsonDocument

JSON文档类。
JsonFormat
{
“Array”: [
true,
999,
“string”
],
“Key”: “Value”,
“null”: null
}

2.QJsonObject

JSON的对象类,由键值对组成,也就是QString和QJsonValue组成。

3.QJsonArray

JSON的数组类,由一系列的JSON的值(QJsonValue)组成

4.QJsonValue

JSON的值。可以是bool、数字、字符串、数组、对象。

三、Qt解析JSON数据格式

这里仅解析简单的不含嵌套结构的json文件,因为json文件和xml文件一样,如果不知道其内部的构造结构,解析出来比较麻烦,但是,如果你清楚其内部结构,就可以通过下述解析方法,轻松地解析出想要的数据。

简述实现步骤:

1.将json文件转为QJsonDocument对象
2.通过isObject或者isArray来获取QJsonObejct对象或者QJsonArray对象
3.QJsonObject对象类似map容器,通过键值对存储。可以通过获取所有key,遍历获取所有值.值的类型是QJsonValue,可以转成对象、数组、数字、字符串、布尔。
4.QJsonArray对象类似数组,可以直接通过下标访问,值的类型是QJsonValue,可以转成对象、数组、数字、字符串、布尔。
QVector<QString> JsonOperate::ParseJsonFile(QString _path)
{
    QVector<QString> _vec ;
    _vec.clear();
    QDir _dir(_path);
    QFile _file(_dir.absoluteFilePath(_path));//创建文件对象
    if(!_file.exists())
    {
        qDebug()<<QString::fromLocal8Bit("不存在该文件!")<<endl;
        return _vec;
    }
    if(!_file.open(QIODevice::ReadOnly))
    {
        qDebug()<<QString::fromLocal8Bit("文件打开失败!")<<endl;
        return _vec;
    }
    QByteArray _byte = _file.readAll();
    QJsonParseError _error;
    QJsonDocument _doc = QJsonDocument::fromJson(_byte,&_error);//将json文件中的内容转成json文件对象
    _file.close();
    //开始解析
    QJsonObject _obt;
    QJsonArray _array;
    if(_doc.isObject())//根节点是json对象
    {
        _obt = _doc.object();//获取对应json对象
        QStringList _keys = _obt.keys();
        for(int i = 0;i < _keys.count();i ++)//将每个键值对组成 kes : value 的字符串格式
        {
            QString _tempStr = _keys.at(i);
            _tempStr += ":";
            _tempStr += _obt.value(_keys[i]).toString();
            _vec.push_back(_tempStr);
        }
    }
    else
    {
        _array = _doc.array();//获取对应json数组
        for(int i = 0;i < _array.count();i ++)
        {
            QString _tempStr = _array.at(i).toString();
            _vec.push_back(_tempStr);
        }
    }
    return _vec;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

结尾

上面的解析方式仅适用于Qt5,如果是只使用C++的话,可以使用GitHub上jsoncpp库来解析JSON文件,用法也很简单:)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/351693
推荐阅读
相关标签
  

闽ICP备14008679号