Heim >Backend-Entwicklung >C++ >JSON-Verarbeitungsmethoden und Implementierung in C++

JSON-Verarbeitungsmethoden und Implementierung in C++

王林
王林Original
2023-08-21 23:58:432554Durchsuche

JSON ist ein leichtes Datenaustauschformat, das leicht zu lesen und zu schreiben ist und von Maschinen leicht analysiert und generiert werden kann. Die Verwendung des JSON-Formats erleichtert die Datenübertragung zwischen verschiedenen Systemen. In C++ gibt es viele Open-Source-JSON-Bibliotheken für die JSON-Verarbeitung. In diesem Artikel werden einige häufig verwendete JSON-Verarbeitungsmethoden und -Implementierungen in C++ vorgestellt.

JSON-Verarbeitungsmethoden in C++

  1. RapidJSON

RapidJSON ist ein schneller C++-JSON-Parser/Generator, der DOM-, SAX- und Speicherpool-APIs bereitstellt. Seine Hauptmerkmale sind wie folgt:

  • Geringer Speicherbedarf und schnelle Ausführungsgeschwindigkeit;
  • Unterstützt UTF-8, UTF-16, UTF-32 und andere Codierungsformate;
  • Unterstützt die Verschiebungssematik von C++11, wodurch Speicher entsteht Effizientere Verwaltung;
  • unterstützt eine SAX-API, die große JSON-Dateien effizient analysieren kann;
  • unterstützt benutzerdefinierte Zuordnungsstrategien (Allokator).

In RapidJSON können JSON-Objekte über DOM und SAX analysiert werden, und die DOM-Methode kann über die Value-Klasse implementiert werden. Das Folgende ist ein Beispielcode, der RapidJSON zum Generieren und Analysieren von JSON verwendet:

#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 ist eine einfache und benutzerfreundliche Eigenschaftsverarbeitungsbibliothek, die verschiedene Eigenschaftsformate verarbeiten kann. Unter anderem unterstützt es auch das Parsen und Generieren von JSON. Boost.PropertyTree ist etwas langsamer als RapidJSON, verfügt aber auch über einige Funktionen:

  • unterstützt mehrere Datenformate, einschließlich INI-Dateien, XML und JSON usw.;
  • unterstützt Datentypen in der C++-Standardbibliothek
  • ist steckbar. Mit beispiellosen Datenformatverarbeitungsfunktionen können Benutzer ihre eigenen erweiterten Formate schreiben.

Das Folgende ist ein Beispielcode zum Generieren und Parsen von JSON mit Boost.PropertyTree:

#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;
}
  1. JsonCpp

JsonCpp ist eine C++-JSON-Bibliothek, die Code of Conduct-API und DOM-Stil-API unterstützt. Unter diesen ähnelt die DOM-API von JsonCpp der Value-Klasse von RapidJSON. Die Funktionen von JsonCpp sind wie folgt:

  • unterstützt UTF-8-Codierung;
  • unterstützt JSON-Analyse und -Generierung;
  • bietet objektorientierte gekapselte API;
  • unterstützt C++11-Verschiebungssematik.

Das Folgende ist ein Beispielcode zum Generieren und Parsen von JSON mit JsonCpp:

#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;
}
  1. Nlohmann.Json

Nlohmann.Json ist eine moderne, leichte und benutzerfreundliche JSON-Verarbeitungsbibliothek. Es bietet eine objektorientierte API und unterstützt C++11 und höhere Standards. Die Funktionen von Nlohmann.Json sind wie folgt:

  • Einzeldatei-Header-Implementierung, einfach zu verwenden;
  • Sehr leichtgewichtig, nur Header; sehr benutzerfreundlich;
  • Das Folgende ist ein Beispielcode, der Nlohmann.Json zum Generieren und Analysieren von JSON verwendet:
  • #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;
    }
  • JSON-Verarbeitungsimplementierung in C++

Das Obige stellt vier häufig verwendete JSON-Verarbeitungsbibliotheken in C++ vor. Werfen wir einen Blick auf die spezifische Implementierung .

RapidJSON-Implementierung

    Zuerst müssen Sie die RapidJSON-Bibliothek in das Projekt einführen, und dann können Sie die DOM-API zum Parsen und Generieren von JSON verwenden. Die DOM-Methode besteht darin, das gesamte JSON-Objekt in den Speicher einzulesen und in einer Value-Klasse zu speichern.
  1. JSON generieren:
// 生成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 analysieren:

// 解析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-Implementierung

    Für die Verwendung von Boost.PropertyTree muss die Boost-Bibliothek in das Projekt eingeführt werden. Anschließend können Sie die ptree-Klasse zum Parsen und Generieren von JSON verwenden. ptree ist eine Baumstruktur. Nach dem Lesen von JSON kann der entsprechende Wert über die get-Funktion von ptree abgerufen werden.
  1. JSON generieren:
// 生成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 analysieren:

// 解析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-Implementierung

    Die Verwendung von JsonCpp erfordert die Einführung der JsonCpp-Bibliothek in das Projekt. Anschließend können Sie die Value-Klasse verwenden, um JSON zu analysieren und zu generieren. Die Value-Klasse von JsonCpp unterstützt mehrere Arten von Werten, z. B. Zeichenfolgen, Zahlen, Boolesche Werte usw.
  1. Generieren Sie JSON:
// 生成JSON
Value root;
Value person;
person["name"] = "Tom";
person["age"] = 20;
root["person"] = person;

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

Parsen Sie 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-Implementierung

    Die Verwendung von Nlohmann.Json erfordert die Einführung der Datei json.hpp in das Projekt. Anschließend können Sie das JSON-Objekt zum Parsen und Generieren von JSON verwenden . Nlohmann.Json ermöglicht die Konvertierung verschiedener STL-Containertypen.
  1. JSON generieren:
// 生成JSON
json j;
j["person"]["name"] = "Tom";
j["person"]["age"] = 20;

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

JSON analysieren:

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

Zusammenfassung

In diesem Artikel werden vier häufig verwendete JSON-Verarbeitungsbibliotheken in C++ vorgestellt: RapidJSON, Boost.PropertyTree, JsonCpp und Nlohmann.Json sowie einige ihrer Eigenschaften und Implementierung Methoden. Durch die Verwendung dieser Open-Source-Bibliotheken kann die Analyse und Generierung der JSON-Kapselung problemlos durchgeführt werden. Bei der tatsächlichen Verwendung sollten Entwickler die JSON-Bibliothek auswählen, die ihren Projektanforderungen am besten entspricht, um die besten Ergebnisse zu erzielen.

Das obige ist der detaillierte Inhalt vonJSON-Verarbeitungsmethoden und Implementierung in C++. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn