雷火电竞-中国电竞赛事及体育赛事平台

歡迎來(lái)到入門(mén)教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

C++使用JsonCpp庫(kù)操作json格式數(shù)據(jù)示例

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊:

本文實(shí)例講述了C++使用JsonCpp庫(kù)操作json格式數(shù)據(jù)的方法。分享給大家供大家參考,具體如下:

前言

JSON是一個(gè)輕量級(jí)的數(shù)據(jù)定義格式,比起XML易學(xué)易用,而擴(kuò)展功能不比XML差多少,用之進(jìn)行數(shù)據(jù)交換是一個(gè)很好的選擇

JSON的全稱為:JavaScript Object Notation ,顧名思義,JSON是用于標(biāo)記javascript對(duì)象的,詳情參考http://www.json.org/。

本文選擇第三方庫(kù)JsonCpp來(lái)解析json,JsonCpp是比較出名的c++解析庫(kù),在json官網(wǎng)也是首推的。

JsonCpp簡(jiǎn)介

JsonCpp主要包含三種類(lèi)型的class:Value Reader Writer。

jsoncpp中所有對(duì)象、類(lèi)名都在namespace json中,包含json.h即可。

注意: Json::Value只能處理ANSI類(lèi)型的字符串,如果C++程序使用Unicode編碼的,最好加一個(gè)Adapt類(lèi)來(lái)適配。

下載和編譯

本文運(yùn)行環(huán)境是: Redhat 5.5 + g++version 4.6.1 +  GNU Make 3.81 + jsoncpp-0.5.0

下載地址是:http://sourceforge.net/projects/jsoncpp/

解壓之后得到j(luò)soncpp-src-0.5.0文件夾,我們只需要jsoncpp的頭文件和cpp文件,其中jsonscpp的頭文件位于jsoncpp-src-0.5.0\include\json,jsoncpp的cpp文件位于jsoncpp-src-0.5.0\src\lib_json。

這里我列出我們的工作目錄:

jsoncpp/           //工作目錄
|-- include        //頭文件根目錄
|  |-- json       //json頭文件,對(duì)應(yīng)jsoncpp-src-0.5.0\include\json
|-- src            //cpp源碼文件根目錄
  |-- json       //jsoncpp源碼文件,對(duì)應(yīng)jsoncpp-src-0.5.0\src\lib_json
  |-- main.cpp   //我們的主函數(shù),調(diào)用jsoncpp的示例代碼
|-- makefile       //makefile,不用我們多說(shuō)了吧,不懂請(qǐng)看本站相關(guān)的makefile用法實(shí)踐

反序列化Json對(duì)象

假設(shè)有一個(gè)json對(duì)象如下:

{
  "name": "json″,
  "array": [
    {
      "cpp": "jsoncpp"
    },
    {
      "java": "jsoninjava"
    },
    {
      "php": "support"
    }
  ]
}

我們要實(shí)現(xiàn)這個(gè)json的反序列號(hào)代碼如下:

void readJson() {
  using namespace std;
  std::string strValue = "{\"name\":\"json\",\"array\":[{\"cpp\":\"jsoncpp\"},{\"java\":\"jsoninjava\"},{\"php\":\"support\"}]}";
  Json::Reader reader;
  Json::Value value;
  if (reader.parse(strValue, value))
  {
    std::string out = value["name"].asString();
    std::cout << out << std::endl;
    const Json::Value arrayObj = value["array"];
    for (unsigned int i = 0; i < arrayObj.size(); i++)
    {
      if (!arrayObj[i].isMember("cpp"))
        continue;
      out = arrayObj[i]["cpp"].asString();
      std::cout << out;
      if (i != (arrayObj.size() - 1))
        std::cout << std::endl;
    }
  }
}

序列化Json對(duì)象

void writeJson() {
  using namespace std;
  Json::Value root;
  Json::Value arrayObj;
  Json::Value item;
  item["cpp"] = "jsoncpp";
  item["java"] = "jsoninjava";
  item["php"] = "support";
  arrayObj.append(item);
  root["name"] = "json";
  root["array"] = arrayObj;
  root.toStyledString();
  std::string out = root.toStyledString();
  std::cout << out << std::endl;
}

完整實(shí)例代碼點(diǎn)擊此處本站下載。

下載之后,執(zhí)行以下命令

unzip jsoncpp.zip
cd jsoncpp
make
./main

PS:關(guān)于json操作,這里再為大家推薦幾款比較實(shí)用的json在線工具供大家參考使用:

在線JSON代碼檢驗(yàn)、檢驗(yàn)、美化、格式化工具:
http://tools.jb51.net/code/json

JSON在線格式化工具:
http://tools.jb51.net/code/jsonformat

在線XML/JSON互相轉(zhuǎn)換工具:
http://tools.jb51.net/code/xmljson

json代碼在線格式化/美化/壓縮/編輯/轉(zhuǎn)換工具:
http://tools.jb51.net/code/jsoncodeformat

在線json壓縮/轉(zhuǎn)義工具:
http://tools.jb51.net/code/json_yasuo_trans

希望本文所述對(duì)大家C++程序設(shè)計(jì)有所幫助。

上一篇:C++有限狀態(tài)機(jī)實(shí)現(xiàn)計(jì)算器小程序

欄    目:C語(yǔ)言

下一篇:淺談C++類(lèi)型轉(zhuǎn)化(運(yùn)算符重載函數(shù))和基本運(yùn)算符重載(自增自減)

本文標(biāo)題:C++使用JsonCpp庫(kù)操作json格式數(shù)據(jù)示例

本文地址:http://www.jygsgssxh.com/a1/Cyuyan/1474.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有