最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年03月03日 11:46:35   作者:feengg  
這篇文章主要介紹了C++使用jsoncpp解析json的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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ì)的說(shuō)明了,下面主要討論下C++解析json文件的工具—Jsoncpp的使用。

JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,和xml類(lèi)似,本文主要對(duì)VS2008中使用Jsoncpp解析json的方法做一下記錄。
Jsoncpp是個(gè)跨平臺(tái)的開(kā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使用說(shuō)明:

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

jsoncpp中主要的類(lèi):

  • Json::Value:可以表示所有支持的類(lèi)型,如:int , double ,string , object, array等。其包含節(jié)點(diǎn)的類(lèi)型判斷(isNull,isBool,isInt,isArray,isMember,isValidIndex等),類(lèi)型獲取(type),類(lèi)型轉(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來(lái)自定義Json的嚴(yán)格等級(jí)。
  • Json::Writer:與JsonReader相反,將Json::Value轉(zhuǎn)換成字符串流等,Writer類(lèi)是一個(gè)純虛類(lèi),并不能直接使用。在此我們使用 Json::Writer 的子類(lèi):Json::FastWriter(將數(shù)據(jù)寫(xiě)入一行,沒(méi)有格式),Json::StyledWriter(按json格式化輸出,易于閱讀)。
  • Json::Reader可以通過(guò)對(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)文章

  • OPENMP?SECTIONS?CONSTRUCT原理示例解析

    OPENMP?SECTIONS?CONSTRUCT原理示例解析

    這篇文章主要為大家介紹了OPENMP?SECTIONS?CONSTRUCT原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • C語(yǔ)言實(shí)現(xiàn)五子棋人人對(duì)戰(zhàn)

    C語(yǔ)言實(shí)現(xiàn)五子棋人人對(duì)戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)五子棋人人對(duì)戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • windows下在vim中搭建c語(yǔ)言開(kāi)發(fā)環(huán)境的詳細(xì)過(guò)程

    windows下在vim中搭建c語(yǔ)言開(kāi)發(fā)環(huán)境的詳細(xì)過(guò)程

    這篇文章主要介紹了windows下在vim中搭建c語(yǔ)言開(kāi)發(fā)環(huán)境,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • 引用numpy出錯(cuò)詳解及解決方法

    引用numpy出錯(cuò)詳解及解決方法

    這篇文章主要介紹了引用numpy出錯(cuò) 解決方法的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • C++基于socket UDP網(wǎng)絡(luò)編程實(shí)現(xiàn)簡(jiǎn)單聊天室功能

    C++基于socket UDP網(wǎng)絡(luò)編程實(shí)現(xiàn)簡(jiǎn)單聊天室功能

    這篇文章主要為大家詳細(xì)介紹了C++基于socket UDP網(wǎng)絡(luò)編程實(shí)現(xiàn)簡(jiǎn)單聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Qt自定義控件實(shí)現(xiàn)線條型加載條

    Qt自定義控件實(shí)現(xiàn)線條型加載條

    這篇文章主要為大家詳細(xì)介紹了Qt自定義控件實(shí)現(xiàn)線條型加載條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • opencv3/C++圖像邊緣提取方式

    opencv3/C++圖像邊緣提取方式

    今天小編就為大家分享一篇opencv3/C++圖像邊緣提取方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • C++11 智能指針之shared_ptr代碼詳解

    C++11 智能指針之shared_ptr代碼詳解

    這篇文章主要介紹了 C++11 智能指針之shared_ptr的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • C語(yǔ)言實(shí)現(xiàn)數(shù)組的循環(huán)移位的方法示例

    C語(yǔ)言實(shí)現(xiàn)數(shù)組的循環(huán)移位的方法示例

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)數(shù)組的循環(huán)移位的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • C++多字節(jié)字符與寬字節(jié)字符相互轉(zhuǎn)換

    C++多字節(jié)字符與寬字節(jié)字符相互轉(zhuǎn)換

    最近在C++編程中經(jīng)常遇到需要多字節(jié)字符與寬字節(jié)字符相互轉(zhuǎn)換的問(wèn)題,自己寫(xiě)了一個(gè)類(lèi)來(lái)封裝wchar_t與char類(lèi)型間的轉(zhuǎn)換
    2012-11-11

最新評(píng)論

扎兰屯市| 广饶县| 搜索| 睢宁县| 两当县| 平遥县| 稷山县| 康保县| 碌曲县| 河津市| 大化| 汽车| 邹平县| 田阳县| 桑植县| 泉州市| 阿克苏市| 鄂伦春自治旗| 来宾市| 田林县| 安平县| 浦北县| 通辽市| 吉水县| 同仁县| 偏关县| 社旗县| 温州市| 宁都县| 垫江县| 米泉市| 霍山县| 凯里市| 贺兰县| 南涧| 东兴市| 津南区| 通化县| 铜鼓县| 涪陵区| 凌云县|