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: 解析cityid
QJsonParseError 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 不断实例化 然后解析