Rumah > Artikel > pembangunan bahagian belakang > Kaedah pemprosesan dan pelaksanaan JSON dalam C++
JSON ialah format pertukaran data ringan yang mudah dibaca dan ditulis serta mudah untuk dihuraikan dan dijana oleh mesin. Menggunakan format JSON memudahkan pemindahan data antara pelbagai sistem. Dalam C++, terdapat banyak perpustakaan JSON sumber terbuka untuk pemprosesan JSON. Artikel ini akan memperkenalkan beberapa kaedah pemprosesan dan pelaksanaan JSON yang biasa digunakan dalam C++.
Kaedah pemprosesan JSON dalam C++
RapidJSON ialah penghurai/penjana JSON C++ pantas yang menyediakan API gaya DOM, SAX dan kumpulan memori. Ciri-ciri utamanya adalah seperti berikut:
Dalam RapidJSON, objek JSON boleh dihuraikan melalui DOM dan SAX, dan kaedah DOM boleh dilaksanakan melalui kelas Nilai. Berikut ialah kod sampel yang menggunakan RapidJSON untuk menjana dan menghuraikan 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 ialah perpustakaan pemprosesan harta yang ringkas dan mudah digunakan yang boleh mengendalikan pelbagai format hartanah. Antaranya, ia juga menyokong penghuraian dan penjanaan JSON. Boost.PropertyTree lebih perlahan daripada RapidJSON, tetapi ia juga mempunyai beberapa ciri:
#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; }Pelaksanaan pemprosesan JSON dalam C++Di atas memperkenalkan empat perpustakaan pemprosesan JSON yang biasa digunakan dalam C++. Mari kita lihat pelaksanaan khusus .
// 生成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;Parse 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;Parse 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;Parse 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"];RingkasanArtikel ini memperkenalkan empat perpustakaan pemprosesan JSON yang biasa digunakan dalam C++: RapidJSON, Boost.PropertyTree, JsonCpp dan Nloh serta beberapa ciri pelaksanaannya, JsonCpp dan Nloh. kaedah . Dengan menggunakan perpustakaan sumber terbuka ini, penghuraian dan penjanaan enkapsulasi JSON boleh dilakukan dengan mudah. Dalam penggunaan sebenar, pembangun harus memilih perpustakaan JSON yang paling sesuai dengan keperluan projek mereka untuk mendapatkan hasil yang terbaik.
Atas ialah kandungan terperinci Kaedah pemprosesan dan pelaksanaan JSON dalam C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!