Maison > Article > développement back-end > Méthodes de traitement JSON et implémentation en C++
JSON est un format d'échange de données léger, facile à lire et à écrire, et facile à analyser et à générer pour les machines. L'utilisation du format JSON facilite le transfert de données entre différents systèmes. En C++, il existe de nombreuses bibliothèques JSON open source pour le traitement JSON. Cet article présentera certaines méthodes de traitement JSON et implémentations couramment utilisées en C++.
Méthodes de traitement JSON en C++
RapidJSON est un analyseur/générateur C++ JSON rapide qui fournit des API de style DOM, SAX et pool de mémoire. Ses principales caractéristiques sont les suivantes :
Dans RapidJSON, les objets JSON peuvent être analysés via DOM et SAX, et la méthode DOM peut être implémentée via la classe Value. Voici un exemple de code qui utilise RapidJSON pour générer et analyser JSON :
#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 est une bibliothèque de traitement de propriétés simple et facile à utiliser qui peut gérer différents formats de propriétés. Parmi eux, il prend également en charge l'analyse et la génération de JSON. Boost.PropertyTree est légèrement plus lent que RapidJSON, mais il possède également certaines fonctionnalités :
#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; }
#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; }
#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; }Implémentation du traitement JSON en C++Ce qui précède présente quatre bibliothèques de traitement JSON couramment utilisées en C++. .
// 生成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;Analyser 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();
// 生成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;Analyser 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");
// 生成JSON Value root; Value person; person["name"] = "Tom"; person["age"] = 20; root["person"] = person; cout << root.toStyledString() << endl;Analyser 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();
// 生成JSON json j; j["person"]["name"] = "Tom"; j["person"]["age"] = 20; cout << j.dump() << endl;Parse JSON :
// 解析JSON json j2 = json::parse("{"person":{"name":"Tom","age":20}}"); const string name = j2["person"]["name"]; const int age = j2["person"]["age"];RésuméCet article présente quatre bibliothèques de traitement JSON couramment utilisées en C++ : RapidJSON, Boost.PropertyTree, JsonCpp et Nlohmann.Json, ainsi que certaines de leurs caractéristiques et de leur implémentation. méthodes. En utilisant ces bibliothèques open source, l'analyse et la génération de l'encapsulation JSON peuvent être facilement effectuées. En utilisation réelle, les développeurs doivent choisir la bibliothèque JSON qui correspond le mieux aux besoins de leur projet pour obtenir les meilleurs résultats.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!