Qt JSON的使用

JSON数据使用

        JSON数据格式的使用主要用于的数据的序列化,主要用于数据的网络传输,以及持久化保存数据;

        JSON的语法结构包括以下几部分内容:

  • 数组(Array)用方括号(“[]”)表示。
  • 对象(0bject)用大括号(“{}”)表示。
  • 名称/值对(name/value)组合成数组和对象。
  • 名称(name)置于双引号中,值(value)有字符串、数值、布尔值、null、对象和数组
  • 并列的数据之间用逗号(“,”)分隔
{
    "features":[
        {
            "id":1,
            "geometry":{
                "type":"Point",
                "coordinates":[
                    533958.52189999819,
                    3123489.1460000016
                ]
            }
        },
       {
            "id":1,
            "geometry":{
                "type":"Point",
                "coordinates":[
                    533958.52189999819,
                    3123489.1460000016
                ]
            }
        },
    ]
}

QT 中JSON的常见API

QJsonObject:JSON 对象是键值对的列表,其中键是唯一的字符串,值由 QJsonValue 表示
// 生成或者构造一个的QJsonObject
QJsonObject::QJsonObject()

// 插入一个新item 键值为key,值为value
QJsonObject::iterator QJsonObject::insert(const QString &key, const QJsonValue &value)

// 返回对象锁拥有item的数量
int QJsonObject::count() const
int QJsonObject::size() const
int QJsonObject::length() const

// 通过key获得对应的value值
QJsonValue	operator[](const QString &key) const
QJsonValue	value(QStringView key) const

// 获得所有的key值列表
QStringList	keys() const

检测key值是否存在
QJsonObject::iterator	find(const QString &key)
bool	contains(const QString &key) const


QJsonArray:类封装了一个 JSON 数组
// 构造的一个对象
QJsonArray(QJsonArray &&other)

// 删除一个独享
void	pop_back()
void	pop_front()

// 头部添加一个值
void	prepend(const QJsonValue &value)

// 尾部添加一个值
void	push_back(const QJsonValue &value)

// 头部添加一个值
void	push_front(const QJsonValue &value)
// 删除一个值
void	removeAt(int i)
void	removeFirst()
void	removeLast()
QJsonValue:将值封装在 JSON 中
// 构造一个对象
QJsonValue(QJsonValue & 其他)
QJsonValue(const QJsonValue &other)
QJsonValue(const QJsonObject &o)
QJsonValue(const QJsonArray &a)
QJsonValue(const char *s)
QJsonValue(QLatin1String s)
QJsonValue(const QString &s)

// 判断指的类型
bool	isArray() const
bool	isBool() const
bool	isDouble() const
bool	isNull() const
bool	isObject() const
bool	isString() const
bool	isUndefined() const

// 转为指定的对象的类型
QJsonArray	toArray(const QJsonArray &defaultValue) const
QJsonArray	toArray() const
bool	toBool(bool defaultValue = false) const
double	toDouble(double defaultValue = 0) const
int	toInt(int defaultValue = 0) const
QJsonObject	toObject(const QJsonObject &defaultValue) const
QJsonObject	toObject() const
QString	toString() const
QString	toString(const QString &defaultValue) const
QVariant	toVariant() const
QJsonValue::Type	type() const
QJsonDocument:提供了一种读取和写入 JSON 文档的方法,他可以从一个UTF-8编码表示的,以及Qt本身的二进制的格式读取和写入的该文档,QJsonObject 和 QJsonArray这两个对象是不能直接转换为的字字符串类型的,需要通过的QJsonDocument进行转化
// 构造一个对象
QJsonDocument(QJsonDocument &&other)
QJsonDocument(const QJsonDocument &other)
QJsonDocument(const QJsonArray &array)
QJsonDocument(const QJsonObject &object)
QJsonDocument()

将QJSONDocument 对象的中的数据进行的序列化

QByteArray	toJson() const
QByteArray	toJson(QJsonDocument::JsonFormat format) const

// 解析字符串
QJsonDocument	fromJson(const QByteArray &json, QJsonParseError *error = nullptr)
QJsonDocument	fromVariant(const QVariant &variant)

QJsonArray	array() const
bool	isArray() const
bool	isEmpty() const
bool	isNull() const
bool	isObject() const

生成JSON数据格式

QJsonObject rootObj;
    //插入name字段
    rootObj.insert("name","China");
    //插入info字段
    QJsonObject infoobj;
    infoobj.insert("caiptal","背景");
    infoobj.insert("asian",true);
    infoobj.insert("founded",1949);
    rootObj.insert("info",infoobj);
    //插入的provinces字段
    QJsonArray provices;
    QJsonObject provices_shandong;
    provices_shandong.insert("name","山东");
    provices_shandong.insert("capital","济南");
    QJsonObject provices_zhejiang;
    provices_zhejiang.insert("name","浙江");
    provices_zhejiang.insert("capital","杭州");
    provices.append(provices_zhejiang);
    provices.append(provices_shandong);
    rootObj.insert("province",provices);
    // 将输出的root变为json格式
    QJsonDocument doc(rootObj);
    QByteArray json= doc.toJson();
    qDebug()<<QString(json).toUtf8().data();
    QFile file("D:\\qt_learn\\demo.json");
    file.open(QFile::WriteOnly);
    file.write(json);
    file.close();

生成的JSON文件如下所示:

JSON数据格式解析

void from_json(){
    QFile file("D:\\qt_learn\\demo.json");
    file.open(QFile::ReadOnly);
    QByteArray json= file.readAll();
    file.close();

    QJsonDocument doc =QJsonDocument::fromJson(json);
    //判断返回的是一个对象
    if(!doc.isObject()){
        qDebug()<<"Don't find information";
    }
    QJsonObject obj = doc.object();
//    获得对象的属性值
    QStringList keys = obj.keys();
    for(int i =0;i<obj.size();i++){
        QString key = keys[i];
        QJsonValue value = obj.value(key);
        if(value.isBool()){
            qDebug()<<value.toBool();
        }else if(value.isDouble()){
            qDebug()<<value.toDouble();
        }else if(value.isObject()){
            qDebug()<<key;
            QJsonObject infoobj=value.toObject();
            QString capital = infoobj["capital"].toString();
            bool asian = infoobj["asian"].toBool();
            QString founded = infoobj["founded"].toString();
            qDebug()<<capital<<asian<<founded<<";";
        }else if(value.isArray()){
            QJsonArray provinces = value.toArray();
            for(int i = 0;i<provinces.size();i++){
                QJsonObject obj =provinces[i].toObject();
                QString name = obj["name"].toString();
                QString capital =obj["capital"].toString();
                qDebug()<<"capital:"<<capital<<";name"<<name;
            }
        }else if(value.isString()){
            qDebug()<<value.toString();
        }
    }

}

输出结果为:

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值