超簡單使用C++解析json:jsoncpp

前言:

    曾經一段時間XML成爲互聯網業界內的數據傳輸格式標準,但有人對XML提出了質疑,認爲XML數據格式比較繁雜,冗長等,於是提出了一種新的表示格式—JSON。

    對於JSON格式,在此就不作詳細的說明了,下面主要討論下C++解析json文件的工具—Jsoncpp的使用。

下載地址:

https://github.com/open-source-parsers/jsoncpp/tree/1.8.4

配置說明:

    從github上download代碼後,會包含很多文件,有些教程說需要先進行編譯然後生成lib文件調用,其實大可不必如此麻煩,C++在使用時只需要使用json.h和jsoncpp.cpp兩個文件即可。

    需要說明的一點是,json.h和jsoncpp.cpp兩個文件是需要通過python腳本生成,生成方法也很簡單,前提是需要配置好Python開發環境,只需要一條命令即可。

生成json.h和jsoncpp.cpp的方法:

    (1) 進入源碼的根目錄,按住【shift】鍵然後右擊,選擇在此處打開命令行,進入cmd界面,然後運行命令:

    (2) 此時會在當前目錄下生成dist文件件,將dist文件夾下面的json.h和jsoncpp.cpp拷出使用即可。

    【附:若無Python環境,可以關注本公衆號,回覆jsoncpp,即可獲取以上兩個文件,或者點擊下面的鏈接下載】

     下載鏈接:https://download.csdn.net/download/feengg/12162153

Jsoncpp使用說明:

下面通過一個簡單的case說明jsoncpp裏主要的接口函數,通過這些基本的函數便可以完成的Json文件的解析和處理。

json示例:

[
  { "name": "json",
    "lines": 
      [
        { "line": "1" },
        { "line": "2" },
        { "cpp": "jsoncpp" },
        { "java": "jsoninjava" },
        { "php": "support" }
      ]
  },
  { "name": "c++",
    "lines": 
      [
        { "line": "3" },
        { "line": "4" },
        { "cpp": "jsoncpp" },
        { "java": "jsoninjava" },
        { "php": "nosupport" }
      ]
  }
]

C++代碼:

#include <iostream>
#include <fstream>
#include <string>
#include "../src/json/json.h"

using namespace std;
using namespace Json;
void main()
{
    fstream ofile("json.json");
    string strjson;
    if (!ofile.is_open()) {
        return;
    }

    string strline;
    while (getline(ofile, strline)) {
    	strjson += strline;
    }
    
    ofile.close();
    
    Json::Reader reader;    // 讀取器
    Json::Value root;       // Value的值值可以是任一對象
    
    if (reader.parse(strjson, root)) {
    
        int size = root.size();     // 根結點個數
    
        for (int j = 0; j < size; j++) {
            
            cout << root[j]["name"].asString() << endl;

            const Json::Value arrayObj = root[j]["lines"];

            for (int i = 0; i < arrayObj.size(); i++) {

                if (arrayObj[i].isMember("line")) {
                    cout << arrayObj[i]["line"].asString() << endl;
                }
                if (arrayObj[i].isMember("cpp")) {
                    cout << arrayObj[i]["cpp"].asString() << endl;
                }
                if (arrayObj[i].isMember("java")) {
                    cout << arrayObj[i]["java"].asString() << endl;
                }
        
                int m = 0;
            }
        }
    }

}

發佈了76 篇原創文章 · 獲贊 95 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章