jsoncpp用法通俗易懂

來源:互聯網
上載者:User

標籤:

剛工作不久,最近遇到一個要解析一個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用法通俗易懂

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.