Heim >Backend-Entwicklung >C++ >JSON-Verarbeitungsmethoden und Implementierung in C++
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++
RapidJSON ist ein schneller C++-JSON-Parser/Generator, der DOM-, SAX- und Speicherpool-APIs bereitstellt. Seine Hauptmerkmale sind wie folgt:
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; }
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:
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; }
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:
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; }
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:
#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; }
Das Obige stellt vier häufig verwendete JSON-Verarbeitungsbibliotheken in C++ vor. Werfen wir einen Blick auf die spezifische Implementierung .
RapidJSON-Implementierung// 生成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
// 生成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
// 生成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
// 生成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!