標籤:
剛工作不久,最近遇到一個要解析一個web伺服器發過來的json格式的檔案,檔案如下:
{ "global": { "renew": "true", "serverurl": "192.168.1.100:31208/opinfo/", "frequency": "60" }, "auth": { "enable": "true", "url": "http://192.168.1.10:31208/authpage/13405/檔案名稱" }, "offline": { "enable": "true", "url": "http://192.168.1.10:31208/offinenotify", "parameters": "um#dm#ot#uf#df" }, "jump": { "enable": "true", "url": "http://nav.cathay/index.html", "parameters": "un#dm#um#ui#di#jt" }, "urlwrite": { "enable": "true","uploadfrequency": "180","uploadurl": "http://192.168.1.10:31208/uwdupload", "urls": [ { "id": "1", "origin": "http://www.baidu.com", "purpose": "http://www.baidu.com?id=cathay", "terminal": "pc", "percent": "50" }, {"id": "2", "origin": "http://www.soso.com", "purpose": "http://www.baidu.com?id=cathay", "terminal": "ios", "percent": "50" }, {"id": "3", "origin": "http://www.google.com", "purpose": "http://www.baidu.com?id=cathay", "terminal": "android", "percent": "100" } ]},"whitelist": { "enable": "true", "urls": [ { "url": "http://www.baidu.com" }, { "url": "http://v.qq.com/" } ]}}
解析一下這個json格式的檔案
整個檔案被一個大括弧包含,相當於一個對象,在json中{}包含著的是對象
在這個大對象中又包含global、auth、offline、jump、urlwrite、whitelist這幾個對象,這幾個名字分別是對象名
像在global、auth、offline、jump中已經不存在對象,只有資料即:“名稱:值”,這樣的在大對象中取出global、auth、offline、jump這幾個對象後就可以取值了
像urlwrite、whitelist這兩個對象中又包含著對象,那麼要在urlwrite、whitelist的基礎上再取對象,然後再取值
這裡在json中[]代表這是一個數組。
其實關鍵是你在處理之前先瞭解好json它的資料格式到底是什麼樣,再去瞭解jsoncpp是怎樣解析json資料的就可以了。
下面是我自己寫的解析demon:
#include "json/json.h"#include <string>#include <stdlib.h>#include <iostream>#include <fstream>using namespace std;int main(){ ifstream is; is.open ("A1-F2-DF-Q2-DC.html", std::ios::binary ); Json::Reader reader; Json::Value root; cout << "beginning...." << endl; if(reader.parse(is,root)) { cout << "將整個Json對象的value儲存到root中去了" << endl;cout << endl; Json::Value arrayObj = root["global"]; string tmp = arrayObj["renew"].asString();cout << "global---renew:" << tmp << endl; tmp.clear();tmp = arrayObj["serverurl"].asString();cout << "global---serverurl:" << tmp << endl;tmp.clear();tmp = arrayObj["frequency"].asString();cout << "global---frequency:" << tmp << endl; tmp.clear();cout << endl;Json::Value arrayObj1 = root["auth"];tmp = arrayObj1["enable"].asString();cout << "auth---enable:" << tmp << endl;tmp.clear();tmp = arrayObj1["url"].asString();cout << "auth---url:" << tmp << endl;tmp.clear();cout << endl;Json::Value arrayObj2 = root["jump"];tmp = arrayObj2["enable"].asString();cout << "jump---enable" << tmp << endl;tmp.clear();tmp = arrayObj2["url"].asString();cout << "jump---url" << tmp << endl;tmp.clear();tmp = arrayObj2["parameters"].asString();cout << "jump---parameters" << tmp << endl;tmp.clear();cout << endl;Json::Value arrayObj3 = root["offline"];tmp = arrayObj3["enable"].asString();cout << "jump---enable" << tmp << endl;tmp.clear();tmp = arrayObj3["url"].asString();cout << "jump---url" << tmp << endl;tmp.clear();tmp = arrayObj3["parameters"].asString();cout << "jump---parameters" << tmp << endl;tmp.clear();cout << endl;Json::Value arrayObj4 = root["whitelist"];tmp = arrayObj4["enable"].asString();cout << "whitelist---enable:" << tmp << endl;tmp.clear();Json::Value arrayObj5 = arrayObj4["urls"];for(int i = 0; i != arrayObj5.size(); i++){tmp = arrayObj5[i]["url"].asString();cout << "whitelist---url" << i << ":" << tmp << endl;tmp.clear();} Json::Value arrayObj6 = root["urlwrite"];tmp = arrayObj6["enable"].asString();cout << "urlwrite---enable:" << tmp << endl;tmp.clear();tmp = arrayObj6["uploadfrequency"].asString();cout << "urlwrite---uploadfrequency:" << tmp << endl;tmp = arrayObj6["uploadurl"].asString();cout << "urlwrite---uploadurl:" << tmp << endl;tmp.clear();Json::Value arrayObj7 = arrayObj6["urls"];for(int i = 0; i != arrayObj7.size(); i++){tmp = arrayObj7[i]["id"].asString();cout << "urlwrite---urls---id:" << tmp << endl;tmp.clear();tmp = arrayObj7[i]["origin"].asString();cout << "urlwrite---urls---origin:" << tmp << endl;tmp.clear();tmp = arrayObj7[i]["purpose"].asString();cout << "urlwrite---urls---purpose:" << tmp << endl;tmp.clear();tmp = arrayObj7[i]["terminal"].asString();cout << "urlwrite---urls---terminal:" << tmp << endl;tmp.clear();tmp = arrayObj7[i]["percent"].asString();cout << "urlwrite---urls---percent:" << tmp << endl;tmp.clear();} } return 0;}
編譯操作:g++ c.cpp -I ./include/ libjson_linux-gcc-4.8_libmt.a
這裡解析一下,include和.a檔案都是編譯jsoncpp產生的,至於怎麼編譯jsoncpp,我更建議自己度娘一下,然後自己會更清楚點。
jsoncpp用法通俗易懂