Qt 之 QJsonDocument 解析json 数据
2017-09-29 22:48
447 查看
QJsonDocument是Qt操作JSON数据的中心类。
它的公有函数如下:
[cpp] view
plain copy
QJsonDocument()
QJsonDocument(const QJsonObject & object)
QJsonDocument(const QJsonArray & array)
QJsonDocument(const QJsonDocument & other)
~QJsonDocument()
void setArray(const QJsonArray & array)
void setObject(const QJsonObject & object)//以上都是往文档中填充数据的
QJsonArray array() const//返回“值”部分的内容(或说将其转化为json数组),一般与下面四个is开头的联合使用
QJsonObject object() const//与上一个相类似,只不过转成json对象
bool isArray() const//以下四个用于判断"值"部分的类型
bool isEmpty() const
bool isNull() const
bool isObject() const
QByteArray toBinaryData() const//以下三个,将数据转化成其它类型用于存诸或其它用处
QByteArray toJson(JsonFormat format = Indented) const
QVariant toVariant() const
const char * rawData(int * size) const
bool operator!=(const QJsonDocument & other) const
QJsonDocument & operator=(const QJsonDocument & other)
bool operator==(const QJsonDocument & other) const
静态成员函数(Static Public Members)都是用来往document上添加json数据的:
[cpp] view
plain copy
QJsonDocument fromBinaryData(const QByteArray & data, DataValidation validation = Validate)//DataValidation为对数据进行判断是否有效,无错,枚举值见1
QJsonDocument fromJson(const QByteArray & json, QJsonParseError * error = 0)//这个静态成员函数有“错误”接口。在无法确定json数据绝对有效时,一般用这个
QJsonDocument fromRawData(const char * data, int size, DataValidation validation = Validate)
QJsonDocument fromVariant(const QVariant & variant)
1,enum QJsonDocument::DataValidation
——————————————————————————————————————————————————————————————————————————
解析的主要步骤如下:
1,将来源数据转化为JsonDocument。可用它的构造函数,或setArray、setObject,或它的静态成员函数。
2,可用下列四函数判断它的最外层数据类型(一般是个对象):
bool isArray() const
bool isEmpty() const
bool isNull() const
bool isObject() const
3,知道类型后,用以下函数将它转化为json对象或json数组或Map
QJsonArray array() const
QJsonObject object() const
QVariant toVariant() const
4,用QJsonArray或QJsonObject 的函数或迭代器遍历取得想要值
——————————————————————————————————————————————————————————————————————————
以下解析例子,所用JSON文档来自上一节介绍JSON时的复杂篇:
[cpp] view
plain copy
#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>
#include <QFile>
#include <QIODevice>
#include <QJsonParseError>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonValue>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
QFile *file=new QFile("://test.json");
file->open(QIODevice::ReadOnly);
QByteArray b= file->readAll();
QJsonParseError *error=new QJsonParseError;
QJsonDocument doc=QJsonDocument::fromJson(b,error);
if(error->error==QJsonParseError::NoError)
{
if(doc.isObject())
{
QJsonObject obj=doc.object();//取得最外层这个大对象
//这里放代码,对json数据进行取值
}
}else
{
qDebug()<<error->errorString();
}
}
Dialog::~Dialog()
{
delete ui;
}
放代码部分可以有几种取值方法
1,数组,层层深入
[cpp] view
plain copy
QJsonArray Array=obj["姓名"].toArray();
QJsonObject obj1=Array[0].toObject();
QJsonObject obj2=obj1["张三"].toObject();
qDebug()<<"张三性别"<<obj2["性别"].toString();
不管是QJsonObject还是QJsonArray,它们都有数组一样的下标方式取值
2,通过迭代器遍历
QJsonObject::iterator
QJsonArray::iterator//也存在这个……
它们两个都有用于遍历的迭代器类。
以QJsonObject为例,可用格式如下:
[cpp] view
plain copy
for (QJsonObject::Iterator it = obj.begin();it != obj.end(); it++)
{
QJsonValue value=it.value();
QJsonArray Array=value.toArray();//将value转成QJsonArray或QJsonObject,继续遍历
}
3,既然迭代器可以,我猜想foreach函数也是可以滴(未测试成功)
[cpp] view
plain copy
QJsonArray Array=obj["姓名"].toArray();
foreach (QJsonValue v, Array) {
qDebug()<<v.toString();
}
可结合:QVariantMap result = jsonDocument.toVariant().toMap();使用,这样转化为遍历一个Map
出处: http://blog.csdn.net/iloveqt5/article/details/18993015
它的公有函数如下:
[cpp] view
plain copy
QJsonDocument()
QJsonDocument(const QJsonObject & object)
QJsonDocument(const QJsonArray & array)
QJsonDocument(const QJsonDocument & other)
~QJsonDocument()
void setArray(const QJsonArray & array)
void setObject(const QJsonObject & object)//以上都是往文档中填充数据的
QJsonArray array() const//返回“值”部分的内容(或说将其转化为json数组),一般与下面四个is开头的联合使用
QJsonObject object() const//与上一个相类似,只不过转成json对象
bool isArray() const//以下四个用于判断"值"部分的类型
bool isEmpty() const
bool isNull() const
bool isObject() const
QByteArray toBinaryData() const//以下三个,将数据转化成其它类型用于存诸或其它用处
QByteArray toJson(JsonFormat format = Indented) const
QVariant toVariant() const
const char * rawData(int * size) const
bool operator!=(const QJsonDocument & other) const
QJsonDocument & operator=(const QJsonDocument & other)
bool operator==(const QJsonDocument & other) const
静态成员函数(Static Public Members)都是用来往document上添加json数据的:
[cpp] view
plain copy
QJsonDocument fromBinaryData(const QByteArray & data, DataValidation validation = Validate)//DataValidation为对数据进行判断是否有效,无错,枚举值见1
QJsonDocument fromJson(const QByteArray & json, QJsonParseError * error = 0)//这个静态成员函数有“错误”接口。在无法确定json数据绝对有效时,一般用这个
QJsonDocument fromRawData(const char * data, int size, DataValidation validation = Validate)
QJsonDocument fromVariant(const QVariant & variant)
1,enum QJsonDocument::DataValidation
Constant | Value | Description |
---|---|---|
QJsonDocument::Validate | 0 | 进行判断,default. |
QJsonDocument::BypassValidation | 1 | 不进行validation.只当数据来源可靠且知道它是绝对有效时使用。如果数据无效,则程序崩溃 |
解析的主要步骤如下:
1,将来源数据转化为JsonDocument。可用它的构造函数,或setArray、setObject,或它的静态成员函数。
2,可用下列四函数判断它的最外层数据类型(一般是个对象):
bool isArray() const
bool isEmpty() const
bool isNull() const
bool isObject() const
3,知道类型后,用以下函数将它转化为json对象或json数组或Map
QJsonArray array() const
QJsonObject object() const
QVariant toVariant() const
4,用QJsonArray或QJsonObject 的函数或迭代器遍历取得想要值
——————————————————————————————————————————————————————————————————————————
以下解析例子,所用JSON文档来自上一节介绍JSON时的复杂篇:
[cpp] view
plain copy
#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>
#include <QFile>
#include <QIODevice>
#include <QJsonParseError>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonValue>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
QFile *file=new QFile("://test.json");
file->open(QIODevice::ReadOnly);
QByteArray b= file->readAll();
QJsonParseError *error=new QJsonParseError;
QJsonDocument doc=QJsonDocument::fromJson(b,error);
if(error->error==QJsonParseError::NoError)
{
if(doc.isObject())
{
QJsonObject obj=doc.object();//取得最外层这个大对象
//这里放代码,对json数据进行取值
}
}else
{
qDebug()<<error->errorString();
}
}
Dialog::~Dialog()
{
delete ui;
}
放代码部分可以有几种取值方法
1,数组,层层深入
[cpp] view
plain copy
QJsonArray Array=obj["姓名"].toArray();
QJsonObject obj1=Array[0].toObject();
QJsonObject obj2=obj1["张三"].toObject();
qDebug()<<"张三性别"<<obj2["性别"].toString();
不管是QJsonObject还是QJsonArray,它们都有数组一样的下标方式取值
2,通过迭代器遍历
QJsonObject::iterator
QJsonArray::iterator//也存在这个……
它们两个都有用于遍历的迭代器类。
以QJsonObject为例,可用格式如下:
[cpp] view
plain copy
for (QJsonObject::Iterator it = obj.begin();it != obj.end(); it++)
{
QJsonValue value=it.value();
QJsonArray Array=value.toArray();//将value转成QJsonArray或QJsonObject,继续遍历
}
3,既然迭代器可以,我猜想foreach函数也是可以滴(未测试成功)
[cpp] view
plain copy
QJsonArray Array=obj["姓名"].toArray();
foreach (QJsonValue v, Array) {
qDebug()<<v.toString();
}
可结合:QVariantMap result = jsonDocument.toVariant().toMap();使用,这样转化为遍历一个Map
出处: http://blog.csdn.net/iloveqt5/article/details/18993015
相关文章推荐
- Qt实现简易天气预报(解析的是json数据)
- Qt中如何解析Json数据
- Qt解析json数据,小例子
- Qt JSON数据解析和存储详解
- 使用Qt内置引擎解析JSON格式数据
- JSON - 使用cJSON 解析Qt通过UDP发送的JSON数据
- Qt简单的解析Json数据例子(一)
- QT 下 json格式数据的 生成 和 解析
- 在Qt中如何通过QJson 解析json数据
- 【Qt编程】基于Qt的词典开发系列<九>--JSON数据解析
- Qt模块化笔记之core——使用QJsonDocument输出JSON数据
- JSON - 使用cJSON 解析Qt通过UDP发送的JSON数据
- 使用QJson解析Qt通过UDP发送的JSON数据
- 如何在Qt C++中解析JSON数据并使之被QML应用
- android如何解析网络上的json数据。
- Python 获取接口数据,解析JSON,写入文件
- Json 数据的解析 ,生成
- PHP文件数据传输用jQuery-ajax进行浏览器->服务器->数据文件->服务器->浏览器的数据传输($_POST,$_GET,json_encode(数组数据回应),json数据解析)
- JSon数据的解析
- 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中