Qt模块化笔记之core——使用QJsonDocument输出JSON数据

上一节讲的都是如何将已有json文档中的数据取出利用。本节利用QJsonDocument,将其它类型的数据转化成json文档输出。

————————————

利用QJsonDocument的静态成员函数:

QJsonDocument	fromVariant(const QVariant & variant)
及公有函数:

QByteArray	toJson(JsonFormat format = Indented) const

————————————
JsonFormat枚举值解释如下:

Constant Value Description
QJsonDocument::Indented(锯齿状的)默认 0 转成易读型
{
    "Array": [
        true,
        999,
        "string"
    ],
    "Key": "Value",
    "null": null
}
QJsonDocument::Compact(紧凑的) 1紧凑的样子……
{"Array": [true,999,"string"],"Key": "Value","null": null}
————————————
对于fromVariant()函数,参数的构造比较复杂;

————————————
以下是我试验成功例子:
简单部分(只使用QMap):
Qt代码:
#include "dialog.h"
#include "ui_dialog.h"
#include <QJsonDocument>
#include <QDebug>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    //基本使用
    QMap<QString, QVariant> m_map;

    QMap<QString, QVariant> map1;
    QMap<QString, QVariant> map2;

    map1.insert("姓名","张三");
    map1.insert("性别","男");
    map1.insert("年龄","25");

    map2.insert("姓名","小丽");
    map2.insert("性别","女");
    map2.insert("年龄","18");

    m_map.insert("0",map1);
    m_map.insert("1",map2);

    QJsonDocument doc=QJsonDocument::fromVariant(QVariant(m_map));
    QByteArray a=doc.toJson();
    qDebug()<<a;

}

Dialog::~Dialog()
{
    delete ui;
}
输出:
"{
    "0": {
        "姓名": "张三",
        "年龄": "25",
        "性别": "男"
    },
    "1": {
        "姓名": "小丽",
        "年龄": "18",
        "性别": "女"
    }
}
" 

————————————
第二个例子,结合QMap和QList,较复杂,但有条理,将详细讲解。
从测试情况看,QMap将形成json对象,QList形成json数组。

结合下面代码及其输出,以下说明设置变量的过程:
首先,得先知道自己要输出什么样的json格式数据,见以输出的json为例。
最外层是一个对象,它只包含一个"资料列表"及它的值部分,为这个最外层对象设变量,即下面的:QMap<QString, QVariant> map1。
第二层是一个数组,它包含了两个对象,将它设为QList<QVariant> list2;
第三层即是两个对象,如,第一个对象包含了"0"与它的值。设为QMap<QString, QVariant> map3;
第四层是对象的详细信息了,设为
QMap<QString, QVariant> map4_1;
QMap<QString, QVariant> map4_2;
一般这一层的数据应远大于两个。可以用循环往里添加

具体的json格式灵活多变,设变量的时候,可以总结成:
从外层向内层设,遇到"{"用QMap<QString, QVariant>,遇到“[”用QList<QVariant>。

添加数据时从内层往外层,即例子中的从map4_1或map4_2开始。

讲到这里,已经十分公式化了,也许你能写出一个程序,使它自动生成输出某格式json文本的Qt代码以供使用……

Qt代码:
    QMap<QString, QVariant> map1;
    QList<QVariant> list2;
    QMap<QString, QVariant> map3;
    QMap<QString, QVariant> map4_1;
    QMap<QString, QVariant> map4_2;

    map4_1.insert("姓名","张三");
    map4_1.insert("性别","男");
    map4_1.insert("年龄","25");

    map4_2.insert("姓名","小丽");
    map4_2.insert("性别","女");
    map4_2.insert("年龄","18");

    map3.insert("0",map4_1);
    map3.insert("1",map4_2);

    list2.append(map3);

    map1.insert("资料列表",list2);

    QJsonDocument doc2=QJsonDocument::fromVariant(QVariant(map1));
    QByteArray b=doc2.toJson();
    qDebug()<<b;

输出:
"{
    "资料列表": [
        {
            "0": {
                "姓名": "张三",
                "年龄": "25",
                "性别": "男"
            },
            "1": {
                "姓名": "小丽",
                "年龄": "18",
                "性别": "女"
            }
        }
    ]
}
" 


  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值