QJsonObject的使用示例

介绍:负责封装JSON对象,是键/值对列表,其中键是惟一的字符串,值由QJsonValue表示。

1——QJsonObjec:封装了Json里的对象

接口与QMap相似,都具有size()、insert()和remove()等操作,还可以使用标准C++迭代器模式对其内容进行迭代。

使用示例:

如下图所示:我们要写入这个数据的话,怎么写进去?

QJsonObject gObj = JSONDATA.getSpecifyGroup(m_iSelectBtnIndex);
//这里读取第一个QJsonObject对象,你可以按照你的需求自己去看

//接下来我们就一层一层的读进去就可以了

//新增加effect
QJsonArray chValueArray;
for(int i = 0 ; i <  ui->cbLightChanleNum->currentText().toInt() ; i++)
{
     chValueArray.append(QJsonValue(0));
}

QJsonObject eObj  =  gObj[JSONKEY::EFFECT_JSONKEY].toObject() ;
QStringList keys = eObj.keys();
for(int i=0;i<keys.size();i++)
{
  QJsonObject sEobj = eObj[keys.value(i)].toObject();
  QJsonArray pArry = eObj[JSONKEY::PROGRAM_JSONKEY].toArray();
  for(int j=0; j<pArry.size();j++)
    {
      QJsonObject stepObj = pArry.at(i).toObject();
       for(int k = 0; k < addrArray.size(); k++)
        {
                        stepObj.insert(QString::number(addrArray.at(k).toInt()),QJsonValue(chValueArray));
        }
      pArry.replace(j,stepObj);
   }
      sEobj[JSONKEY::PROGRAM_JSONKEY] = pArry;
      eObj[keys.value(i)]=sEobj;
}
gObj[JSONKEY::EFFECT_JSONKEY] = eObj;
JSONDATA.setSpecifyGroup(m_iSelectBtnIndex,gObj);//这里是封装的存入Json文件的接口

记住一点就可以,[]前面的就是 Json数组格式,{}就是个Json对象格式

2——QJsonArray: 封装了Json里的数组

3——QJsonDocument:转换器
上文知JSON一共有两种格式,即JSON数组和JSON对象,它们最终要利用JSON完成序列化,将数据转换为对应的字符串,或者有另外一种情况是字符串转换为JSON数组和JSON对象

简单的JSON对象

{
    "Cross Platform": true,
    "From": 1991,
    "Name": "Qt"
}

 生成:

// 构建 JSON 对象
QJsonObject json;
json.insert("Name", "Qt");
json.insert("From", 1991);
json.insert("Cross Platform", true);

// 构建 JSON 文档
QJsonDocument document;
document.setObject(json);
QByteArray byteArray = document.toJson(QJsonDocument::Compact);
QString strJson(byteArray);

qDebug() << strJson;

简单的JSON解析

QJsonParseError jsonError;
// 转化为 JSON 文档
QJsonDocument doucment = QJsonDocument::fromJson(byteArray, &jsonError); 
// 解析未发生错误
if (!doucment.isNull() && (jsonError.error == QJsonParseError::NoError)) 
{  
    if (doucment.isObject()) 
    { 
        // JSON 文档为对象
        QJsonObject object = doucment.object();  // 转化为对象
        if (object.contains("Name")) 
        {  // 包含指定的 key
            QJsonValue value = object.value("Name");  // 获取指定 key 对应的 value
            if (value.isString()) 
            {  // 判断 value 是否为字符串
                QString strName = value.toString();  // 将 value 转化为字符串
                qDebug() << "Name : " << strName;
            }
        }
        if (object.contains("From")) 
        {
            QJsonValue value = object.value("From");
            if (value.isDouble()) 
            {
                int nFrom = value.toVariant().toInt();
                qDebug() << "From : " << nFrom;
            }
        }
        if (object.contains("Cross Platform")) 
        {
            QJsonValue value = object.value("Cross Platform");
            if (value.isBool()) 
            {
                bool bCrossPlatform = value.toBool();
                qDebug() << "CrossPlatform : " << bCrossPlatform;
            }
        }
    }
}

 4——QJsonValue: 是对前面调到的数据类型的包装,C++中针对不同的数据类型有不同的声明,QJsonValue类是利用构造函数将各种数据类型进行了统一化,包装成一种类型,操作更为简单。

QJsonValue 可以封装的基础数据类型有六种

布尔类型QJsonValue::Bool
浮点类型(包括整形)QJsonValue::Double
字符串类型QJsonValue::String
Json 数组类型QJsonValue::Array
Json 对象类型QJsonValue::Object
空值类型QJsonValue::Null


(1)各种类型可以通过 QJsonValue 的构造函数被封装为一个类对象;

(2)如果我们得到一个 QJsonValue 对象,如何判断内部封装的到底是什么类型的数据呢?

// 是否是Json数组
bool isArray() const;
// 是否是Json对象
bool isObject() const;
// 是否是布尔类型
bool isBool() const;
// 是否是浮点类型(整形也是通过该函数判断)
bool isDouble() const;
// 是否是空值类型
bool isNull() const;
// 是否是字符串类型
bool isString() const;
// 是否是未定义类型(无法识别的类型)
bool isUndefined() const;

(3)通过判断函数得到对象内部数据的实际类型之后,如果有需求就可以再次将其转换为对应的基础数据类型。

// 转换为Json数组
QJsonArray toArray(const QJsonArray &defaultValue) const;
QJsonArray toArray() const;
// 转换为布尔类型
bool toBool(bool defaultValue = false) const;
// 转换为浮点类型
double toDouble(double defaultValue = 0) const;
// 转换为整形
int toInt(int defaultValue = 0) const;
// 转换为Json对象
QJsonObject toObject(const QJsonObject &defaultValue) const;
QJsonObject toObject() const;
// 转换为字符串类型
QString toString() const;
QString toString(const QString &defaultValue) const;
  • QJsonValueQVariant互转
QJsonValue fromVariant(const QVariant &variant)
QVariant QJsonValue::toVariant() const
  • QJsonValue可以与QJsonObjectQJsonArray互转
QJsonValue::QJsonValue(const QJsonArray &a)
QJsonObject QJsonValue::toObject() const
QJsonValue::QJsonValue(const QJsonObject &o)
QJsonArray QJsonValue::toArray() const

  • 4
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
QJsonObjectQt框架提供的一个类,用于表示JSON对象。它可以用于创建、修改和解析JSON数据。QJsonObject可以插入键值对,并通过键来访问对应的值。 在引用中,代码示例展示了如何使用QJsonObject的一些方法。首先创建了一个空的QJsonObject对象,然后通过insert方法插入了三个键值对。这样就构建了一个包含三个属性的JSON对象。最后,通过QJsonDocument将QJsonObject转化为JSON文档,并可以将其存储为字符串或字节数组。 在引用中,也展示了通过QJsonDocument解析JSON对象的方法。首先将JSON文档转化为QJsonDocument对象,然后可以通过QJsonObject的contains方法判断JSON对象中是否包含指定的键,再通过value方法获取对应的值。根据值的类型,可以使用不同的方法进行获取和转换。 总结来说,QJsonObjectQt提供的用于表示JSON对象的类,可以用于创建、修改和解析JSON数据。可以通过insert方法插入键值对,并通过value方法获取对应的值。同时,也可以通过QJsonDocument将JSON对象转化为字符串或字节数组。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [QJsonObject使用示例](https://blog.csdn.net/ligare/article/details/125393450)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼2333号程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值