当前位置: 首页>前端>正文

从json快速创建java类 创建json数据

rapidjson

rapidjson是一个C++库,用于解析和生成JSON数据格式。它是一个高性能、轻量级的库,由于使用了DOM和SAX两种解析方式,可以满足不同场景的需求。rapidjson的特点包括:支持Unicode、跨平台、简单易用、解析速度快等。它可以在很多领域得到广泛应用,如网络通信、数据存储和数据交换等。

解析的工具有:

RapidJSON
JSON for Modern C++
Boost.PropertyTree
C++ REST SDK
QtJson
nlohmann/json
Jansson
cJSON

0创建一个json数据

#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include "iostream"
using namespace rapidjson;

int main() {

//    // JSON字符串
//    const char* json = R"({"name":"John","age":30,"isStudent":true})";
//    // 解析JSON字符串
//    Document document;
//    document.Parse(json);
//    // 获取字段
//    const char* name = document["name"].GetString();
//    int age = document["age"].GetInt();
//    bool isStudent = document["isStudent"].GetBool();
//
//    // 输出结果
//    printf("name: %s\nage: %d\nisStudent: %s\n", name, age, isStudent ? "true" : "false");
//
//    return 0;
    rapidjson::Document document;  // 创建一个JSON文档对象
    document.SetObject();  // 将该文档对象设置为一个JSON对象
    rapidjson::Document::AllocatorType& allocator = document.GetAllocator();  // 获取分配器
    rapidjson::Value hobbies(rapidjson::kObjectType);  // 创建一个空对象
    // 向对象中添加键值对
    hobbies.AddMember("name", "reading", allocator);
    hobbies.AddMember("level", "advanced", allocator);
    // 将对象添加到JSON对象中
    document.AddMember("hobbies", hobbies, allocator);

    StringBuffer buffer;  // 创建一个字符串缓冲区
    Writer<StringBuffer> writer(buffer);  // 创建一个JSON写入器
    document.Accept(writer);  // 将JSON对象序列化为字符串并写入缓冲区
    // 输出结果
   std::cout<< buffer.GetString() << std::endl;
 
}

创建一个json格式的数组数据,填入数据

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

using namespace rapidjson;

int main() {

    Document document;  // 创建一个JSON文档对象
    document.SetObject();  // 将该文档对象设置为一个JSON对象
    Document::AllocatorType& allocator = document.GetAllocator();  // 获取分配器
    Value hobbies(kArrayType);  // 创建一个空数组

    // 向数组中添加多个对象
    Value reading(kObjectType);
    reading.AddMember("name", "reading", allocator);
    reading.AddMember("level", "advanced", allocator);
    hobbies.PushBack(reading, allocator);

    Value swimming(kObjectType);
    swimming.AddMember("name", "swimming", allocator);
    swimming.AddMember("level", "beginner", allocator);
    hobbies.PushBack(swimming, allocator);

    // 将数组添加到JSON对象中
    document.AddMember("hobbies", hobbies, allocator);

    StringBuffer buffer;  // 创建一个字符串缓冲区
    Writer<StringBuffer> writer(buffer);  // 创建一个JSON写入器
    document.Accept(writer);  // 将JSON对象序列化为字符串并写入缓冲区

    // 输出结果
    std::cout << buffer.GetString() << std::endl;

    return 0;
}

个人记录

3 创建后再读出来

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

using namespace rapidjson;

int main() {

    Document document;  // 创建一个JSON文档对象
    document.SetObject();  // 将该文档对象设置为一个JSON对象
    Document::AllocatorType &allocator = document.GetAllocator();  // 获取分配器
    Value hobbies(kArrayType);  // 创建一个空数组

    // 向数组中添加多个对象
    Value reading(kObjectType);
    reading.AddMember("name", "reading", allocator);
    reading.AddMember("level", "advanced", allocator);
    hobbies.PushBack(reading, allocator);

    // 将数组添加到JSON对象中
    document.AddMember("hobbies", hobbies, allocator);

    StringBuffer buffer;  // 创建一个字符串缓冲区
    Writer<StringBuffer> writer(buffer);  // 创建一个JSON写入器
    document.Accept(writer);  // 将JSON对象序列化为字符串并写入缓冲区



    //读出来
    Document document1;
    document1.Parse(buffer.GetString());
    //这一行代码是获取了名为"hobbies"的成员的值,它在之前的代码中被添加到了document对象中
    //hobbies1是一个引用,指向document对象中名为"hobbies"的成员的值,它是一个包含多个对象的数组。
    //这里使用const修饰表示hobbies1是一个只读的引用,即不能通过hobbies1修改document对象中的值。
    const Value &hobbies1 = document["hobbies"];
	//获取json数组的个数
    for (SizeType i = 0; i < hobbies1.Size(); i++) {
        const Value &hobby = hobbies1[i];
        const char *name = hobby["name"].GetString();
        const char *level = hobby["level"].GetString();
        std::cout << "Hobby " << i << ": name = " << name << ", level = " << level << std::endl;
    }

    return 0;
}



https://www.xamrdz.com/web/2au1964389.html

相关文章: