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 ) ; //解析: //口诀: 遇到 { 括号就 .toMap() // 遇到 [ 括号就 .toList() 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>
//Json 文件转成QVariant
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);
//json 数据转 QVariant
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;
//QVariant to QByteArray
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中内置了一个QJsonDocument类用来处理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,这里说下jsonjson解析首先分为这几个类: 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...