欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++使用jsoncpp解析json的方法示例

 更新時(shí)間:2020年03月03日 11:46:35   作者:feengg  
這篇文章主要介紹了C++使用jsoncpp解析json的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言:

曾經(jīng)一段時(shí)間XML成為互聯(lián)網(wǎng)業(yè)界內(nèi)的數(shù)據(jù)傳輸格式標(biāo)準(zhǔn),但有人對(duì)XML提出了質(zhì)疑,認(rèn)為XML數(shù)據(jù)格式比較繁雜,冗長(zhǎng)等,于是提出了一種新的表示格式—JSON。

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

JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,和xml類似,本文主要對(duì)VS2008中使用Jsoncpp解析json的方法做一下記錄。
Jsoncpp是個(gè)跨平臺(tái)的開源庫(kù),下載地址:http://sourceforge.net/projects/jsoncpp/

解壓:tar -zvxf jsoncpp-src-0.5.0.tar.gz

進(jìn)入到j(luò)soncpp解壓目錄下,執(zhí)行命令:

sudo scons platform=linux-gcc

將/jsoncpp-src-0.5.0/include/目錄下的json文件夾拷貝到 /usr/local/include/

將jsoncpp-src-0.5.0/libs/linux-gcc-4.9.1/目錄下的libjson_linux-gcc-4.9.1_libmt.a 拷貝到 /usr/local/lib/ 下,并為了方便使用,將其重命名為libjson.a

Jsoncpp使用說明:

下面通過一個(gè)簡(jiǎn)單的case說明jsoncpp里主要的接口函數(shù),通過這些基本的函數(shù)便可以完成的Json文件的解析和處理。

jsoncpp中主要的類:

  • Json::Value:可以表示所有支持的類型,如:int , double ,string , object, array等。其包含節(jié)點(diǎn)的類型判斷(isNull,isBool,isInt,isArray,isMember,isValidIndex等),類型獲取(type),類型轉(zhuǎn)換(asInt,asString等),節(jié)點(diǎn)獲取(get,[]),節(jié)點(diǎn)比較(重載<,<=,>,>=,==,!=),節(jié)點(diǎn)操作(compare,swap,removeMember,removeindex,append等)等函數(shù)。
  • Json::Reader:將文件流或字符串創(chuàng)解析到Json::Value中,主要使用parse函數(shù)。Json::Reader的構(gòu)造函數(shù)還允許用戶使用特性Features來自定義Json的嚴(yán)格等級(jí)。
  • Json::Writer:與JsonReader相反,將Json::Value轉(zhuǎn)換成字符串流等,Writer類是一個(gè)純虛類,并不能直接使用。在此我們使用 Json::Writer 的子類:Json::FastWriter(將數(shù)據(jù)寫入一行,沒有格式),Json::StyledWriter(按json格式化輸出,易于閱讀)。
  • Json::Reader可以通過對(duì)Json源目標(biāo)進(jìn)行解析,得到一個(gè)解析好了的Json::Value,通常字符串或者文件輸入流可以作為源目標(biāo)。

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的值值可以是任一對(duì)象
  
  if (reader.parse(strjson, root)) {
  
    int size = root.size();   // 根結(jié)點(diǎn)個(gè)數(shù)
  
    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;
      }
    }
  }
 
}

 到此這篇關(guān)于C++使用jsoncpp解析json的方法示例的文章就介紹到這了,更多相關(guān)C++ jsoncpp解析json內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ 中實(shí)現(xiàn)把EXCEL的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)(ACCESS、MSSQL等)實(shí)例代碼

    C++ 中實(shí)現(xiàn)把EXCEL的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)(ACCESS、MSSQL等)實(shí)例代碼

    這篇文章主要介紹了C++ 中實(shí)現(xiàn)把EXCEL的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)(ACCESS、MSSQL等)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • C/C++ break和continue區(qū)別及使用方法

    C/C++ break和continue區(qū)別及使用方法

    這篇文章主要介紹了C/C++ break和continue區(qū)別及使用方法的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 一文詳解C++中的引用與關(guān)鍵字auto

    一文詳解C++中的引用與關(guān)鍵字auto

    引用就是給一個(gè)已經(jīng)存在的變量取一個(gè)別名,與變量共用一段內(nèi)存空間。關(guān)鍵字auto一般可以用來自動(dòng)識(shí)別類型,本文主要來講講二者的相關(guān)知識(shí),需要的可以參考一下
    2023-04-04
  • C語(yǔ)言初階之?dāng)?shù)組詳細(xì)介紹

    C語(yǔ)言初階之?dāng)?shù)組詳細(xì)介紹

    大家好,本篇文章主要講的是C語(yǔ)言初階之?dāng)?shù)組詳細(xì)介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C語(yǔ)言通訊錄實(shí)例分享

    C語(yǔ)言通訊錄實(shí)例分享

    這篇文章主要為大家分享了C語(yǔ)言通訊錄實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 求子數(shù)組最大和的解決方法詳解

    求子數(shù)組最大和的解決方法詳解

    本篇文章是對(duì)求子數(shù)組最大和的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 利用Matlab繪制優(yōu)美的k線圖

    利用Matlab繪制優(yōu)美的k線圖

    本期又是一個(gè)花里胡哨的數(shù)據(jù)可視化,前兩天刷到了耐克的視覺設(shè)計(jì)師Gladys Orteza繪制的k線圖作品,把沉悶的股票圖變成了精彩的風(fēng)景,但是那些大部分是真的完全看不清,我這里挑選了幾個(gè)能看清的k線圖風(fēng)格將其用MATLAB進(jìn)行了實(shí)現(xiàn)
    2022-10-10
  • C++面試八股文之static_cast你了解嗎

    C++面試八股文之static_cast你了解嗎

    C++11引入四種新的類型轉(zhuǎn)換,分別是static_cast、dynamic_cast、const_cast、和reinterpret_cast,下面就來和大家講講static_cast中面試常考的知識(shí)點(diǎn)吧
    2023-06-06
  • 最新評(píng)論