QStringList list
;
list
<<
"4"
<<
"1"
<<
"9"
<<
"0"
<<
"8"
<<
"7"
<<
"1"
<<
"3"
<<
"7"
;
for
(
int
i
=
0
;
i
<
list
.
size
(
)
;
++
i
)
{
yeList
.
append
(
QString
(
list
.
at
(
i
)
)
.
toInt
(
)
)
;
map
.
insert
(
"ye"
,
yeList
)
;
QByteArray jsonByteArray
=
qVariantToByteArray
(
map
)
;
qDebug
(
)
<<
"map:"
<<
map
;
qDebug
(
)
<<
"json:"
<<
QString
(
jsonByteArray
)
;
QVariant jsonVar
=
getJsonVariant
(
jsonByteArray
)
;
qDebug
(
)
<<
"hai:"
<<
jsonVar
.
toMap
(
)
.
value
(
"hai"
)
.
toString
(
)
;
QVariantList reYeList
=
jsonVar
.
toMap
(
)
.
value
(
"ye"
)
.
toList
(
)
;
qDebug
(
)
<<
"ye:"
<<
reYeList
;
foreach
(
auto
var
,
reYeList
)
{
qDebug
(
)
<<
var
.
toInt
(
)
;
Starting D:\QtDemo\2019\10\build-MyCobomBox-Qt_5_12_1_mingw73_64-Release\release\MyCobomBox.exe...
map: QMap(("hai", QVariant(QString, "QQ"))("ye", QVariant(QVariantList, (QVariant(int, 4), QVariant(int, 1), QVariant(int, 9), QVariant(int, 0), QVariant(int, 8), QVariant(int, 7), QVariant(int, 1), QVariant(int, 3), QVariant(int, 7)))))
json: "{\n \"hai\": \"QQ\",\n \"ye\": [\n 4,\n 1,\n 9,\n 0,\n 8,\n 7,\n 1,\n 3,\n 7\n ]\n}\n"
hai: "QQ"
ye: (QVariant(int, 4), QVariant(int, 1), QVariant(int, 9), QVariant(int, 0), QVariant(int, 8), QVariant(int, 7), QVariant(int, 1), QVariant(int, 3), QVariant(int, 7))
#include <QVariantList>
#include <QVariantMap>
#include <QJsonDocument>
#include <QJsonParseError>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
QVariant getJsonVariant(const QString &filePath)
QByteArray json;
QFileInfo fileInfo(filePath);
if(fileInfo.isFile()){
QFile file(fileInfo.absoluteFilePath());
if(file.open(QIODevice::ReadOnly)){
json = file.readAll();
file.close();
}else{
qWarning()<<fileInfo.filePath()<<"is not a file";
return getJsonVariant(json);
QVariant getJsonVariant(const QByteArray &json)
QJsonParseError error;
QVariant var;
QJsonDocument jsonDocument = QJsonDocument::fromJson(json, &error);
if (error.error == QJsonParseError::NoError) {
if (!(jsonDocument.isNull() || jsonDocument.isEmpty())) {
if (jsonDocument.isObject()) {
var = jsonDocument.toVariant().toMap();
}else if(jsonDocument.isArray()){
var = jsonDocument.toVariant().toList();
}else{
qDebug()<<"jsonDocument.isEmpty()";
}else{
qWarning()<<error.errorString().toUtf8().constData();
return var;
QByteArray qVariantToByteArray(const QVariant &var){
QByteArray data;
if(!var.isNull()){
switch (var.type()) {
case QVariant::ByteArray:
data = var.toByteArray();
break;
case QVariant::Map:
case QVariant::List:
data = QJsonDocument::fromVariant(var).toJson(QJsonDocument::Indented);
break;
case QVariant::String:
data = var.toString().toLocal8Bit();
break;
default:
break;
return data;
使用 QVariant 优点: Qt 内部数据传输,UI 控件数据绑定, 便捷不用二次转换,对于比较大的json文件无法解析, 具体没测试多大的文件.
缺点: 无法对 double 进行小数点截断 (QJsonObject 也不行, 非官方 QJSON 可以)
目录
JSON解析对象
解析数组
解析数组对象混合
解析对象数组混合
解析Qt中内置了一个Q
JsonDocument类用来处理
json文件,以及
json字符串。
解析JSON是一种存储结构化数据的格式。它有6种基本数据类型:bool、double、string、array、object、null测试数据
Qt json解析对象 代码
数组
解析
Qt json解析数组代码
数组对象混合
解析
Qt json解析代码
对象数组混合
解析
fastJson默认会将浮点数类型的后两位.00去掉。现在项目中的需求是:需要保留两位小数,形如10.00这种格式,因此需要对JsonSerializer.serialize方法进行重写,自定义返回的浮点数类型。
1、首先定义一个JsonSerializerUtils 类继承JsonSerializer抽象类,重写serialize方法
import com.fasterxml.jackso...
1、JSON(JavaScriptObject Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
2、注意:JSON 是 ...
在使用qt进行开发时,获取其它语言开发时,json数据格式是我们绕不过去的一个环节:
eg:服务器进行数据交互,保存用户配置信息等等,当然格式有多种:ini;xml,这里说下json;
json解析首先分为这几个类: QJsonDocument QJsonObject QJsonArray QJsonValue
QJsonParseError;
一般分为组织数据给别人使用或者解析整包里面的内容;
这里举个例子,linux系统获取根分区所在的最上层的分区名称,先贴段代码;
#include "
//修改JsonSerializer<Double> 到需要的类型,默认为JsonSerializer,参数为Object value
public class JsonSerializerUtils extends JsonSerializer<Double> {
@Override
public void serialize(Double value,...
Qt支持处理JSON数据。JSON是一种对源自Javascript的对象数据进行编码的格式,但现在被广泛用作互联网上的数据交换格式。Qt中的JSON支持提供了一个易于使用的C++API来解析、修改和保存JSON数据。它还支持以二进制格式保存数据,这种格式可以直接“mmap”,并且访问速度非常快。JSON数据格式的更多详细信息可以在JSON中找到。
https://www.json.org/json-en.html和RFC-4627
中https://www.rfc-editor.org/rfc/rfc462
00. 目录
文章目录00. 目录01. QJsonValue类介绍02. QJsonValue成员方法03. QJsonValue成员方法介绍04. 附录
01. QJsonValue类介绍
Header: #include <QJsonValue>
qmake: QT += core
Since: Qt 5.0
QJsonValue类封装了JSON中的值。JSON中的值有6种基...
开发中处理处理价格金额问题, 后台经常返回float、double类型, 打印或转成NSString都会有精度丢失问题, 因此使用系统自带的NSDecimalNumber做处理, 能解决这问题:
处理精度有关的数据先把数据转成double类型
此处我是以stri...