QT使用QJson生成解析,简单的JSON,复杂的Json使用方法

来源:互联网 发布:隔音窗户 知乎 编辑:程序博客网 时间:2024/05/21 14:01
<strong><span style="font-size:24px;color:#cc33cc;">吾虽浪迹天涯,却从未迷失本心</span></strong>
又到了周一了,今天说的是生成解析复杂的json用法

---------------------------------------------------------------------------------------------------华丽的分割线---------------------------------------------------------------------------------------------------

说实话我不太喜欢Qjson的解析方法但是他的语法很清晰

那么先看一段简单的生成QJSON的方法吧:

//简单的QTJson数据QJsonObject simp_ayjson;simp_ayjson.insert("name", "LLH");simp_ayjson.insert("age", 20);simp_ayjson.insert("myAccounts", QString::fromLocal8Bit("123你好"));QJsonDocument document;document.setObject(simp_ayjson);QByteArray simpbyte_array = document.toJson(QJsonDocument::Compact);QString simpjson_str(simpbyte_array);qDebug() << QString::fromLocal8Bit("简单的QTJson数据:") << simpjson_str;

该段代码会生成一个简单的Qjson字符串如图:


这段简单的json只有age,name,myAccount

他的解析方法是:

//简单的QT解析JSONQJsonParseError simp_json_error;QString name, myAccount;int age;//QTJSON所有的元素QJsonDocument simp_parse_doucment = QJsonDocument::fromJson(simpjson_str.toUtf8(), &simp_json_error);//检查json是否有错误if (simp_json_error.error == QJsonParseError::NoError){if (simp_parse_doucment.isObject()){//开始解析json对象QJsonObject obj = simp_parse_doucment.object();//如果包含nameif (obj.contains("name")){//的到nameQJsonValue name_value = obj.take("name");if (name_value.isString()){//转换namename = name_value.toVariant().toString();}}if (obj.contains("myAccounts")){QJsonValue myAccount_value = obj.take("myAccounts");if (myAccount_value.isDouble()){myAccount = myAccount_value.toVariant().toString();}}if (obj.contains("age")){QJsonValue age_value = obj.take("age");if (age_value.isDouble()){age = age_value.toVariant().toInt();}}}}qDebug() << QString::fromLocal8Bit("简单的QT解析出来的数据:") << name << "," << age << "," << myAccount;

解析出来的数据如图:



其实这种json能满足一般的要求但是有些特殊数据要求json里面带有json数组就需要复杂一点的json了,来吧让我们继续。

-----面对疾风吧》》》》》》》》》》》》》》》》》》》》》》》》》》

--------------------------------------------------------------------------------------------------华丽的分割线------------------------------------------------------------------------------------------------------

复杂的json生成代码:

//复杂的QTJson数据 QJsonArray arrays;for (int i = 0; i < 5;i++){arrays.insert(i, QString::fromLocal8Bit("你好:%1").arg(i));}QJsonObject complex_json;complex_json.insert("name", "LLHlllll");complex_json.insert("age", 201);complex_json.insert("myAccounts", QString::fromLocal8Bit("123你好llll"));complex_json.insert("arrays", arrays);QJsonDocument complex_document;complex_document.setObject(complex_json);QByteArray complex_byte_array = complex_document.toJson(QJsonDocument::Compact);QString complex_json_str(complex_byte_array);qDebug() <<"\n"<< QString::fromLocal8Bit("复杂的QTJson数据:") << complex_json_str;

如图复杂的json打印:



那么让我们来看看复杂的json如何解析吧:

//复杂的QT数据解析QJsonParseError complex_json_error;QJsonDocument complex_parse_doucment = QJsonDocument::fromJson(complex_json_str.toUtf8(), &complex_json_error);if (complex_json_error.error == QJsonParseError::NoError){if (complex_parse_doucment.isObject()){ //开始解析json对象QJsonObject jsonObject = complex_parse_doucment.object();if (jsonObject.contains("name")){QJsonValue groupName_value = jsonObject.take("name");if (groupName_value.isString()){name = groupName_value.toString(); }}if (jsonObject.contains("myAccounts")){QJsonValue myAccount_value = jsonObject.take("myAccounts");if (myAccount_value.isString()){myAccount = myAccount_value.toVariant().toString();;}}if (jsonObject.contains("age")){QJsonValue groupIndex_value = jsonObject.take("age");if (groupIndex_value.isDouble()){age = groupIndex_value.toVariant().toInt();;}} if (jsonObject.contains("arrays")){QJsonValue arrays_value = jsonObject.take("arrays");if (arrays_value.isArray())//判断他是不是json数组{    QJsonArray heeloArray = arrays_value.toArray();;   for (int i = 0; i < heeloArray.size(); i++){QJsonValue helloArrayValue = heeloArray.at(i);   if (helloArrayValue.isString()){   qDebug() <<"\n"<< QString::fromLocal8Bit("输出复杂的json:") << helloArrayValue.toString();}}}}} }


可以看到复杂的json解析代码有点长,原因可能是QT喜欢w3c就是docment元素的解析风格也就是docment树解析把数据加载成一颗树,然后在进行解析,好处是速度快,缺点是需要大量内存,代码虽然长点但是好理解,因为每一步都他的解析方式。

解析出来如图:



这次的json教程就到这里了,其他的json再怎么复杂万变不离其宗

--------------------------------------------------------------------------------------------------------------end-------------------------------------------------------------------------------------------------------------------
最后附上博主的源代码:http://download.csdn.net/detail/li491093957/9655744


1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 驾考紧张脚抖怎么办 驾考科目三紧张怎么办 孩子不自信容易紧张怎么办 在人多时候紧张怎么办 考科目二很紧张怎么办 明天出成绩很紧张怎么办 一紧张就射精了怎么办 孩子在幼儿园表现不好怎么办 小孩子在幼儿园表现的不好怎么办 学籍档案写错了怎么办 发展报告填错了怎么办 学生发展报告丢了怎么办 大一新生入学团员档案袋丢失怎么办 三年级孩子语文成绩差怎么办 运气不好时 我们该怎么办 猫走了财运变差怎么办 特别在意别人的眼光怎么办 入职两个月没有业绩怎么办 在学舞蹈中孩子怕疼怎么办 我生二胎怕疼怎么办 孩子的执行力差怎么办 怀孕三个月不想要孩子怎么办 生完孩子老是掉头发怎么办 5岁半宝宝有狐臭怎么办? 4岁宝宝脾气倔怎么办 小孩子摔到后脑勺吐了怎么办 学生报告册丢了怎么办 错过宝宝语言敏感期怎么办 父亲骂我很难听怎么办 90后父母催婚怎么办 和隔壁邻居吵架了怎么办 教师上课期间孩子出问题责任怎么办 孩子一考试妈妈就焦虑怎么办 妈妈爱发脾气孩子也发脾气怎么办 孩子对家人有抵触情绪怎么办 孩子因为没耐心哭闹怎么办 宝宝哭闹真是没耐心怎么办 对自己孩子没耐心怎么办 跳了把腰伤了怎么办 爸爸对妈妈家暴怎么办 逆反心强23岁怎么办