亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 後端開發(fā) C++ C++中的JSON處理方法及實(shí)現(xiàn)

C++中的JSON處理方法及實(shí)現(xiàn)

Aug 21, 2023 pm 11:58 PM
json 實(shí)現(xiàn) 處理方法

JSON是一種輕量級資料交換格式,易於閱讀和編寫,也易於機(jī)器解析和產(chǎn)生。使用JSON格式可以方便地在各個(gè)系統(tǒng)之間傳遞資料。在C 中,有許多開源的JSON函式庫可以進(jìn)行JSON的處理。本文將介紹一些常用的C 中的JSON處理方法及實(shí)作。

C 中的JSON處理方法

  1. RapidJSON

RapidJSON是一個(gè)快速的C JSON解析器/產(chǎn)生器,提供DOM、SAX和內(nèi)存池樣式API。它主要的特點(diǎn)有以下幾點(diǎn):

  • 記憶體佔(zhàn)用小,執(zhí)行速度快;
  • #支援UTF-8、UTF-16、UTF-32等多種編碼格式;
  • 支援C 11的move sematics,使記憶體管理更有效率;
  • 支援SAX風(fēng)格的API,能夠?qū)Υ笮蚃SON檔案進(jìn)行高效解析;
  • 支援自訂分配策略(allocator)。

RapidJSON中,JSON物件可以透過DOM和SAX方式解析,其中DOM方式可以透過Value類別來實(shí)現(xiàn)。以下是一個(gè)使用RapidJSON產(chǎn)生並解析JSON的範(fàn)例程式碼:

#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>

using namespace rapidjson;
using namespace std;

int main() {
    // 生成JSON
    StringBuffer s;
    Writer<StringBuffer> writer(s);
    writer.StartObject();
    writer.Key("name");
    writer.String("Tom");
    writer.Key("age");
    writer.Int(20);
    writer.EndObject();

    // 解析JSON
    Document d;
    d.Parse(s.GetString());
    cout << "name: " << d["name"].GetString() << endl;
    cout << "age: " << d["age"].GetInt() << endl;

    return 0;
}
  1. Boost.PropertyTree

Boost.PropertyTree是一個(gè)簡單易用的屬性處理函式庫,能夠處理各種屬性格式。其中,它也支援解析和生成JSON。 Boost.PropertyTree比RapidJSON略慢,但也有一些特點(diǎn):

    ##支援多種資料格式,包括INI檔案、XML和JSON等;
  • 支援C 標(biāo)準(zhǔn)函式庫和BOOST函式庫中的資料類型;
  • 具有可插拔的資料格式處理能力,使用者可以編寫自己的擴(kuò)充格式。
以下是使用Boost.PropertyTree產(chǎn)生並解析JSON的範(fàn)例程式碼:

#include <iostream>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>

using namespace std;
using boost::property_tree::ptree;
using boost::property_tree::read_json;
using boost::property_tree::write_json;

int main() {
    // 生成JSON
    ptree pt;
    pt.put("name", "Tom");
    pt.put("age", 20);

    // 解析JSON
    string json_str;
    write_json(cout, pt);
    cout << endl;

    read_json("test.json", pt);
    cout << "name: " << pt.get<string>("name") << endl;
    cout << "age: " << pt.get<int>("age") << endl;

    return 0;
}

    JsonCpp
JsonCpp是一個(gè)C 的JSON函式庫,支援行為準(zhǔn)則API和DOM風(fēng)格API。其中,JsonCpp的DOM API類似RapidJSON的Value類別。 JsonCpp的特點(diǎn)有以下幾點(diǎn):

    支援UTF-8編碼;
  • #支援JSON的解析與產(chǎn)生;
  • 提供物件導(dǎo)向封裝的API;
  • 支援C 11的move sematics。
以下是使用JsonCpp產(chǎn)生並解析JSON的範(fàn)例程式碼:

#include <iostream>
#include <json/json.h>

using namespace std;
using namespace Json;

int main() {
    // 生成JSON
    Value root;
    root["name"] = "Tom";
    root["age"] = 20;
    string json_str = root.toStyledString();
    cout << json_str << endl;

    // 解析JSON
    Reader reader;
    Value value;
    reader.parse("{"name":"Tom","age":20}", value, false);
    cout << "name: " << value["name"].asString() << endl;
    cout << "age: " << value["age"].asInt() << endl;

    return 0;
}

    Nlohmann.Json
Nlohmann.Json是現(xiàn)代的,輕量級,易於使用的JSON處理庫。它提供了物件導(dǎo)向的API,並支援C 11和以上的標(biāo)準(zhǔn)。 Nlohmann.Json的特點(diǎn)有以下幾點(diǎn):

    單一檔案頭實(shí)現(xiàn),使用方便;
  • 支援多種STL容器;
  • 非常輕量級, headers only;
  • 格式化輸出非常友善。
以下是使用Nlohmann.Json產(chǎn)生並解析JSON的範(fàn)例程式碼:

#include <iostream>
#include <nlohmann/json.hpp>

using namespace std;
using json = nlohmann::json;

int main() {
    // 生成JSON
    json j;
    j["name"] = "Tom";
    j["age"] = 20;
    string json_str = j.dump();
    cout << json_str << endl;

    // 解析JSON
    json j2 = json::parse("{"name":"Tom","age":20}");
    cout << "name: " << j2["name"] << endl;
    cout << "age: " << j2["age"] << endl;

    return 0;
}

C 中的JSON處理實(shí)作

以上介紹了四種常用的C中JSON處理庫,下面我們來看看具體實(shí)作。

    RapidJSON實(shí)作
首先需要在專案中引入RapidJSON函式庫,然後就可以使用DOM API來進(jìn)行JSON的解析與產(chǎn)生。 DOM方式是將整個(gè)JSON物件讀入內(nèi)存,並儲(chǔ)存在一個(gè)Value類別中。

產(chǎn)生JSON:

// 生成JSON
Value root(kObjectType);
Value person(kObjectType);
person.AddMember("name", "Tom", allocator);
person.AddMember("age", 20, allocator);
root.AddMember("person", person, allocator);

StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
root.Accept(writer);
cout << buffer.GetString() << endl;

解析JSON:

// 解析JSON
Document d;
d.Parse("{"person":{"name":"Tom","age":20}}");
const Value& person = d["person"];
const string name = person["name"].GetString();
const int age = person["age"].GetInt();

    Boost.PropertyTree實(shí)作
使用Boost.PropertyTree需要在專案中引入boost函式庫,然後就可以使用ptree類別來解析和產(chǎn)生JSON。 ptree是一種樹狀結(jié)構(gòu),讀入JSON後,可以透過ptree的get函數(shù)來取得對應(yīng)的值。

產(chǎn)生JSON:

// 生成JSON
ptree root;
ptree person;
person.put("name", "Tom");
person.put("age", 20);
root.add_child("person", person);

stringstream stream;
write_json(stream, root);
cout << stream.str() << endl;

解析JSON:

// 解析JSON
ptree root;
read_json("test.json", root);
const string name = root.get<string>("person.name");
const int age = root.get<int>("person.age");

    JsonCpp實(shí)作
使用JsonCpp需要在專案中引入JsonCpp函式庫,然後就可以使用Value類別來進(jìn)行JSON的解析和產(chǎn)生。 JsonCpp的Value類別支援多種類型的值,如字串、數(shù)字、布林等。

產(chǎn)生JSON:

// 生成JSON
Value root;
Value person;
person["name"] = "Tom";
person["age"] = 20;
root["person"] = person;

cout << root.toStyledString() << endl;

解析JSON:

// 解析JSON
Reader reader;
Value value;
string json_str = "{"person":{"name":"Tom","age":20}}";
reader.parse(json_str, value);
const string name = value["person"]["name"].asString();
const int age = value["person"]["age"].asInt();

    Nlohmann.Json實(shí)作
使用Nlohmann.Json需要將json. hpp檔案引入到專案中,然後就可以使用json物件進(jìn)行JSON的解析和產(chǎn)生。 Nlohmann.Json提供了各種STL容器類型的轉(zhuǎn)換。

產(chǎn)生JSON:

// 生成JSON
json j;
j["person"]["name"] = "Tom";
j["person"]["age"] = 20;

cout << j.dump() << endl;

解析JSON:

// 解析JSON
json j2 = json::parse("{"person":{"name":"Tom","age":20}}");
const string name = j2["person"]["name"];
const int age = j2["person"]["age"];
總結(jié)

本文介紹了C 中四種常用的JSON處理函式庫:RapidJSON、Boost. PropertyTree、JsonCpp和Nlohmann.Json,以及它們的一些特點(diǎn)和實(shí)作方法。透過使用這些開源函式庫,可以方便地進(jìn)行JSON的封裝解析和產(chǎn)生。在實(shí)際使用中,開發(fā)人員應(yīng)該選擇最適合自己專案需求的JSON函式庫,以獲得最佳的使用效果。

以上是C++中的JSON處理方法及實(shí)現(xiàn)的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
華為手機(jī)如何實(shí)現(xiàn)雙微信登入? 華為手機(jī)如何實(shí)現(xiàn)雙微信登入? Mar 24, 2024 am 11:27 AM

華為手機(jī)如何實(shí)現(xiàn)雙微信登入?隨著社群媒體的興起,微信已成為人們?nèi)粘I钪胁豢苫蛉钡臏贤üぞ咧弧H欢?,許多人可能會(huì)遇到一個(gè)問題:在同一部手機(jī)上同時(shí)登入多個(gè)微信帳號。對於華為手機(jī)用戶來說,實(shí)現(xiàn)雙微信登入並不困難,本文將介紹華為手機(jī)如何實(shí)現(xiàn)雙微信登入的方法。首先,華為手機(jī)自帶的EMUI系統(tǒng)提供了一個(gè)很方便的功能-應(yīng)用程式雙開。透過應(yīng)用程式雙開功能,用戶可以在手機(jī)上同

PHP 數(shù)組轉(zhuǎn) JSON 的效能最佳化技巧 PHP 數(shù)組轉(zhuǎn) JSON 的效能最佳化技巧 May 04, 2024 pm 06:15 PM

PHP數(shù)組轉(zhuǎn)JSON的效能最佳化方法包括:使用JSON擴(kuò)充和json_encode()函數(shù);新增JSON_UNESCAPED_UNICODE選項(xiàng)以避免字元轉(zhuǎn)義;使用緩衝區(qū)提高循環(huán)編碼效能;快取JSON編碼結(jié)果;考慮使用第三方JSON編碼庫。

如何在 Golang 中將 JSON 資料保存到資料庫中? 如何在 Golang 中將 JSON 資料保存到資料庫中? Jun 06, 2024 am 11:24 AM

可以透過使用gjson函式庫或json.Unmarshal函數(shù)將JSON資料儲(chǔ)存到MySQL資料庫中。 gjson函式庫提供了方便的方法來解析JSON字段,而json.Unmarshal函數(shù)需要一個(gè)目標(biāo)類型指標(biāo)來解組JSON資料。這兩種方法都需要準(zhǔn)備SQL語句和執(zhí)行插入操作來將資料持久化到資料庫中。

Jackson庫中註解如何控制JSON序列化和反序列化? Jackson庫中註解如何控制JSON序列化和反序列化? May 06, 2024 pm 10:09 PM

Jackson庫中的註解可控制JSON序列化和反序列化:序列化:@JsonIgnore:忽略屬性@JsonProperty:指定名稱@JsonGetter:使用獲取方法@JsonSetter:使用設(shè)定方法反序列化:@JsonIgnoreProperties:忽略屬性@ JsonProperty:指定名稱@JsonCreator:使用建構(gòu)子@JsonDeserialize:自訂邏輯

如何在華為手機(jī)上實(shí)現(xiàn)微信分身功能 如何在華為手機(jī)上實(shí)現(xiàn)微信分身功能 Mar 24, 2024 pm 06:03 PM

如何在華為手機(jī)上實(shí)現(xiàn)微信分身功能隨著社群軟體的普及和人們對隱私安全的日益重視,微信分身功能逐漸成為人們關(guān)注的焦點(diǎn)。微信分身功能可以幫助使用者在同一臺(tái)手機(jī)上同時(shí)登入多個(gè)微信帳號,方便管理和使用。在華為手機(jī)上實(shí)現(xiàn)微信分身功能並不困難,只需要按照以下步驟操作即可。第一步:確保手機(jī)系統(tǒng)版本和微信版本符合要求首先,確保你的華為手機(jī)系統(tǒng)版本已更新至最新版本,以及微信App

如何使用 PHP 函數(shù)處理 JSON 資料? 如何使用 PHP 函數(shù)處理 JSON 資料? May 04, 2024 pm 03:21 PM

PHP提供了以下函數(shù)來處理JSON資料:解析JSON資料:使用json_decode()將JSON字串轉(zhuǎn)換為PHP數(shù)組。建立JSON資料:使用json_encode()將PHP陣列或物件轉(zhuǎn)換為JSON字串。取得JSON資料的特定值:使用PHP數(shù)組函數(shù)存取特定值,例如鍵值對或陣列元素。

騰訊會(huì)議出現(xiàn)卡頓的處理方法 騰訊會(huì)議出現(xiàn)卡頓的處理方法 Apr 02, 2024 pm 02:25 PM

1.打開騰訊會(huì)議點(diǎn)擊一下用戶頭像。 2.開啟的介面選擇【設(shè)定】。 3.在設(shè)定介面點(diǎn)選一下【網(wǎng)路偵測】。

PHP 數(shù)組轉(zhuǎn) JSON 的快捷技巧 PHP 數(shù)組轉(zhuǎn) JSON 的快捷技巧 May 03, 2024 pm 06:33 PM

PHP陣列可透過json_encode()函數(shù)轉(zhuǎn)換為JSON字串(例如:$json=json_encode($array);),反之亦可用json_decode()函數(shù)從JSON轉(zhuǎn)換為陣列($array=json_decode($json);) 。其他技巧還包括:避免深度轉(zhuǎn)換、指定自訂選項(xiàng)以及使用第三方程式庫。

See all articles