由于json格式的数据阅读起来简单方便,也便于机器解析与生成。在最近的项目中,使用json格式的数据可以快速的传输,首次使用这种格式,所以把自己的封装数组的使用心得记录下来。
QJsonObject json;
QJsonArray Array;
json.insert("x","100");
json.insert("y","200");
Array.push_back(json);
QJsonDocument jsonDoc(Array);
QByteArray strArray = jsonDoc.toJson(QJsonDocument::Indented);
QString string(strArray);
QJsonObject strjson;
strjson.insert("date",string);
strjson.insert("time","2018.10.19");
QJsonDocument strdocument;
strdocument.setObjects(strjson);
QByteArray Ary = strdocument.toJson(QJsonDocument::Indented);
最终的结果为{"date" : "[ {"ux" : "100" , "uy" : "200"} ]" ,"time" : "2018.10.19"}
解析上面的json数据
QJsonParseError error;
QJsonDocument document = QJsonDocument::fromJson(Ary, &jsonError);
if(!document.isNull() &&(error.error = QJsonParseError::NoError)
if(document.isObject())
QJsonObject object = document.object();
QJsonObject::Iterator it;
for(it = object.begin;it != object.end;it++)
QString key = it.key();
QString value = it.value().toString();
if("time" == key)
qDebug()<<"time:"<<value;
if("date" == key)
if(it.value.isArray())
QJsonArray array = it.value().toString();
for(int i = 0;i < array.count(); i ++)
QJsonValue value = array.at(i);
QJsonObject object = value.toObject();//转化为对象
QJsonObject::Iterator it;
for(it = object.begin();it != object.end();it ++)
QString key = it.key();
QString value = it.value().toString();
if("ux" == key)
qDebug()<<"ux:"<<value;
if("uy" == key)
qDebug()<<"uy:"<<value;
由于json格式的数据阅读起来简单方便,也便于机器解析与生成。在最近的项目中,使用json格式的数据可以快速的传输,首次使用这种格式,所以把自己的封装数组的使用心得记录下来。 QJsonObject json; QJsonArray Array; json.insert("x","100"); json.insert("y","200"...
一、
json
格式
简介
JSON
是一种轻量级的
数据
交换
格式
,采用key-value键值对的方式来存储
数据
,主要用于网络通讯传输、本地配置文件等,易于人阅读和编写。
2、
json
中
的对象和数组
对象:采用大括号{},括起来,
中
间的以key-value的形式存储,形如{“name”:“ISmileLi”}。
数组:采用
中
括号[...
JSON
数组 ----> 相当于一个数组,可以用来存放:int char ,类类型
在
数据
封装的
格式
中
,
使用
符号“{ }" 代表
JSON
对象
使用
符号"[]"代表数组
JSON
对象和
JSON
数组的关系:
JSON
对象可以嵌套
JSON
数组
JSON
数组可以嵌套
JSON
对象
JSON
对象可以嵌套
JSON
对象
前几天遇到这样一个场景,在S端我要
使用
C++发送一个
json
格式
的字符串,在C端要
解析
,所以怎么
使用
C++来
解析
和包装
json
呢?Java里面比较简单,
使用
Map就可以实现,但是C++不行。经过查询,有两种方法,一种是
使用
框架nlohmann,一种是
Qt
支持
Json
,但是说实话不太人性化,资料也比较少。经过一段时间
使用
nlohmann,发现如果字符串为空就会报异常,所以我最终还是选择了
Qt
的方法,毕竟这个项目就是
Qt
做的嘛,这样一致性好些,也不用再加外来的库了
json
格式
具体有几
自己根据CMarkup启发,
使用
Q
Json
Document完成类似CMarkup调用的
json
组装
解析
实例,内测多次无问题,目前还有优化空间,我的环境是
qt
5.5,欢迎大家提出不同意见共同进步。
本实例
使用
数据
为测试
数据
,实际
数据
可根据业务需求进行扩展。
#include <Q
Json
Document> //
json
文件
#include <Q
Json
Object> //
json
对象
#include <Q
Json
Array> //Q
Json
Object数组
1>、
Qt
中
Json
的组装结构
Q
Json
Document //整个双...
00. 目录
文章目录00. 目录01. Q
Json
Value类介绍02. Q
Json
Value成员方法03. Q
Json
Value成员方法介绍04. 附录
01. Q
Json
Value类介绍
Header: #include <Q
Json
Value>
qmake:
QT
+= core
Since:
Qt
5.0
Q
Json
Value类封装了
JSON
中
的值。
JSON
中
的值有6种基...
在
Qt
中
,可以
使用
Q
Json
Document 类来封装和
解析
JSON
格式
数据
。以下是一个简单的示例,演示如何将
数据
封装为
JSON
格式
,然后将其
解析
回来:
```cpp
#include <Q
Json
Document>
#include <Q
Json
Object>
// 封装
JSON
格式
数据
Q
Json
Object
json
Object;
json
Object["name"] = "张三";
json
Object["age"] = 30;
json
Object["married"] = true;
Q
Json
Document
json
Doc(
json
Object);
QByteArray
json
Data =
json
Doc.to
Json
();
//
解析
JSON
格式
数据
Q
Json
Document
json
Doc2 = Q
Json
Document::from
Json
(
json
Data);
Q
Json
Object
json
Object2 =
json
Doc2.object();
QString name =
json
Object2["name"].toString();
int age =
json
Object2["age"].toInt();
bool married =
json
Object2["married"].toBool();
在上面的示例
中
,我们首先创建了一个 Q
Json
Object 对象,并添加了一些键值对。然后,我们
使用
Q
Json
Document 类的 to
Json
() 函数将其序列化为
JSON
格式
的
数据
,并将其存储在 QByteArray
中
。
接下来,我们
使用
Q
Json
Document 类的静态函数 from
Json
() 将
JSON
格式
数据
解析
回来,并将其存储在另一个 Q
Json
Object 对象
中
。我们可以通过键名访问 Q
Json
Object
中
的值,并
使用
相应的 toXXX() 函数将其转换为适当的类型。
注意:在实际应用
中
,我们应该在
解析
JSON
格式
数据
时,先检查每个键是否存在,以避免出现异常情况。