1.json概述
http://baike.baidu.com/link?url=3P2eXrMR413S9j6eSVtvJCUOfNHS5TAWM_TuySi5NG5fLr_lU5kqsQD0A1LIL7KH4hKe6SKSnwrz09SCNS2RKK
百度百科很详细了
2.json解析
一般的json很好解析,如果是嵌套的json数据刚接触qt的可能会感觉有点麻烦 下面是我使用qt5.4解析json的各个类型的实例
假设我们的json数据为
QString alljsffondata=QString("{"
"\"CityId\":\"盐城\"," "\"EmployeeId\":1618," " \"FangInfo\":{" " \"ef_bz\":null," " \"ef_cq\":\"70\"," " \"ef_cx\":\"南\"," "\"ef_dj\":0," "\"ef_dy\":null," "\"ef_dz\":null," "\"ef_fl\":\"2005\"," "\"ef_fwss\":\",\"," "\"ef_fx1\":1," " \"ef_fx2\":1," "\"ef_fx3\":1," " \"ef_fx4\":1," " \"ef_fx5\":1," "\"ef_fyzt\":null," "\"ef_jtqk\":null," "\"ef_jzjg\":null," "\"ef_jzmj\":60," " \"ef_kffs\":\"\"," " \"ef_lc1\":2," " \"ef_lc2\":7," " \"ef_lxdh\":null," "\"ef_mail\":null," " \"ef_mh\":null," " \"ef_sjhm\":null," " \"ef_symj\":null," " \"ef_wydz\":\"北环附近\"," " \"ef_wyglf\":0," " \"ef_wyglfdw\":null," "\"ef_wylx\":\"住宅\"," "\"ef_wymc\":\"安军成\"," "\"ef_wyyt\":null," "\"ef_xsdj\":10000," " \"ef_xszj\":60," "\"ef_xszjdw\":null," " \"ef_xz\":null," "\"ef_yj\":null," "\"ef_yzmc\":\"宁虎\"," "\"ef_zbhj\":null," "\"ef_zj\":null," "\"ef_zxqk\":\"毛坯\"," " \"pq\":\"null\"," "\"qx\":\"金水区\"," "\"fy_desc\":\"房源特色: 1:地段好、位置佳,房子升值空间大!周边商场、超市、医疗、教育 、休闲娱乐健身、公交交通等设施齐全,交通便利,出行方便! 2:小区发展成熟,绿化率高,空气清新,特别适合居住!房子楼层低 ,价位低,户型好,南北通透,通风性好,楼间距大,采光好! 3:带20平米小院!欢迎来电咨询、更多优质房源等着您!也许这不是 适合您的房子,但是我会通过我的努力为您找到更满意的房子!\"," "\"fy_title\":\"安军成毛坯有天然气无税1房出售\"," "\"hxpics\":\"http://pic2.58cdn.com.cn/p1/big/n_v1bkuyfvjh35nvpbhbjbxq.jpg,http://pic1.58cdn.com.cn/p1/big/n_v1bl2lwwje35nvpf5nlvpa.jpg,http://pic1.58cdn.com.cn/p1/big/n_v1bl2lwxt34bnvplkxjjaa.jpg,http://pic2.58cdn.com.cn/p1/big/n_v1bl2lwtl44bnvpevvyzja.jpg,http://pic2.58cdn.com.cn/p1/big/n_v1bj3gzrzukwdfom4axf3a.jpg,http://pic2.58cdn.com.cn/p1/big/n_v1bl2lwtjukwdfpi4qlbua.jpg,http://pic1.58cdn.com.cn/p1/big/n_v1bl2lwxr5kwdfpjwwsrua.jpg\"," " \"qf_city\":0," "\"snpics\":null," "\"xqpics\":\"http://pic1.58cdn.com.cn/p1/big/n_v1bl2lwwje35nvpf5nlvpa.jpg\"" "}," "\"SendToWebSite\":[" "{" "\"Pass\":\"132716596200\"," "\"ShowMobile\":\"17760709945\"," "\"ShowName\":\"张三丰\"," "\"Tid\":1," "\"ToWebSiteId\":\"D58\"," "\"UserName\":\"17760709945\"" "}," "{" "\"Pass\":\"qq123456\"," "\"ShowMobile\":\"13333841711\"," "\"ShowName\":\"张二丰\"," "\"Tid\":1," "\"ToWebSiteId\":\"D58\"," "\"UserName\":\"13333841711\"" "}," "{" "\"Pass\":\"zs123456\"," "\"ShowMobile\":\"13333848785\"," "\"ShowName\":\"张一丰\"," "\"Tid\":1," "\"ToWebSiteId\":\"D58\"," "\"UserName\":\"13333848785\"" "}" "]," "\"Type\":\"s\"" "}" ); 1.一般无嵌套数据解析 eg: 解析cityidQJsonParseError error1;//用来判断json数据格式是否有错误
QJsonDocument jsonDocument1 = QJsonDocument::fromJson(alljsondata.toUtf8(), &error1); if (error1.error == QJsonParseError::NoError) { if (jsonDocument1.isObject()){ QVariantMap result1 = jsonDocument1.toVariant().toMap(); qDebug() << "Type:" << result1[name].toString(); } } else { qDebug() << "解析出错!"<<error1.errorString();//boomshakalaka return 0; } 2.嵌套 { } 的解析 eg fanginfo
QJsonParseError error1;
QJsonDocument jsonDocument1 = QJsonDocument::fromJson(alljsondata.toUtf8(), &error1); if (error1.error == QJsonParseError::NoError) { if (jsonDocument1.isObject()) { QVariantMap result1 = jsonDocument1.toVariant().toMap(); //信息解析!!!!({}x形式的。tomap) []形式的转为tolist QVariantMap FangInfoMap = result1["FangInfo"].toMap(); qDebug() << "ef_yzmc:" << FangInfoMap["ef_yzmc"].toString(); } } else { qDebug() <<"解析出错!"<<error1.errorString(); return 0; }3.嵌套【 { } 】的解析 eg
SendToWebSite 中的数据 QJsonParseError error1; QJsonDocument jsonDocument1 = QJsonDocument::fromJson(alljsondata.toUtf8(), &error1); if (error1.error == QJsonParseError::NoError) { if (jsonDocument1.isObject()) { QVariantMap result1 = jsonDocument1.toVariant().toMap(); //用户信息解析!! qDebug() <<"发布到网站的个数:"<<result1["SendToWebSite"].toList().size(); //发布 foreach (QVariant SendToWebSite, result1["SendToWebSite"].toList()) { //来个map //qDebug() << "\r\n" << SendToWebSite.toMap(); QVariantMap userdata = SendToWebSite.toMap(); qDebug() << "Pass:" << userdata["Pass"].toString() alldatafromweb[1]=userdata["Pass"]; allwebtosend<<alldatafromweb;//QList<QVariantList> allwebtosend 可以用来存放ToWebSite中的{}里的数据 } } } 多个【】或者{}的嵌套解析 嵌套其实也是用同样的方法的 ({}x形式的。tomap) []形式的转为tolist 不断实例化 然后解析
