littlebot
Published on 2025-04-07 / 0 Visits
0

【源码】基于C++的JSON解析与HTTP协议库pjcore

项目简介

pjcore是一个经过良好测试的C++库,专为处理JSON、Protocol Buffers(protobuf)和HTTP协议而设计。它提供了强大的API,让C++程序处理JSON数据和HTTP请求/响应变得简单高效,并且支持跨平台,适用于多种操作系统和环境。

项目的主要特性和功能

  1. JSON解析与生成:支持JSON解析和生成,可处理可选的尾部逗号、注释、大整数、NaN、Infinity等,还提供如pretty - print的灵活JSON打印选项。
  2. Protobuf与JSON映射:能自然地将protobuf消息类型映射到JSON对象,方便两者间的转换,支持protobuf消息的序列化和反序列化。
  3. HTTP客户端和服务器:提供HTTP客户端和服务器实现,可轻松处理HTTP请求和响应,使用libuv事件循环机制,支持异步I/O操作。
  4. 跨平台兼容性:在多种操作系统和平台上有良好的兼容性。

安装使用步骤

依赖项

  1. Protocol Buffers
  2. libuv
  3. http - parser

构建步骤

  1. 复制项目并初始化子模块: bash cd pjcore git submodule init git submodule update
  2. 使用提供的构建脚本进行编译:
  3. 在Linux或Mac上运行: bash ./build.sh
  4. 在Windows上运行: bash build.bat
  5. 使用生成的库文件和头文件在你的项目中使用pjcore。

使用案例

序列化protobuf消息到JSON

```cpp

include "pjcore/json.h"

include "pjcore/protobuf.h"

int main() { pjcore::Bookstore bookstore; bookstore.set_name("The Shop Around The Corner"); bookstore.set_url("http://bookstore.com");

std::cout << pjcore::WriteJson(bookstore) << std::endl;
return 0;

} ```

解析JSON到protobuf消息

```cpp

include "pjcore/json.h"

include "pjcore/protobuf.h"

int main() { std::string json = "{\"name\":\"Lorem Ipsum\",\"content\":\"Dolor sit amet.\"}"; pjcore::Error error; pjcore::JsonValue json_value;

if (!pjcore::ReadJson(json, &json_value, &error)) {
    // 处理解析错误
} else {
    pjcore::Article article;
    if (!pjcore::UnboxJsonValue(json_value, &article, &error)) {
        // 处理反序列化错误
    } else {
        std::cout << article.DebugString() << std::endl;
    }
}
return 0;

} ```

运行一个简单的HTTP服务器

```cpp

include "pjcore/http_server.h"

class HelloWorldHttpHandler : public pjcore::AbstractHttpHandler { public: HelloWorldHttpHandler() : AbstractHttpHandler("HelloWorldHttpHandler", NULL) {}

void AsyncHandle(scoped_ptr request, const pjcore::HttpResponseCallback& on_response) { scoped_ptr response(new pjcore::HttpResponse()); response->set_content("Hello, world!\n"); on_response.Run(response.Pass(), pjcore::Error()); }

protected: scoped_ptr CaptureLive() const { return scoped_ptr(); } };

int main() { pjcore::HttpServerConfig config; config.set_port(8080);

pjcore::SharedHttpHandler handler(new HelloWorldHttpHandler());

pjcore::Error error;
pjcore::SharedHttpServer server = pjcore::HttpServer::Create(config, handler, &error);

if (!server) {
    // 处理错误
} else if (!server->InitAsync(pjcore::Bind(&OnServerDestroy), &error)) {
    // 处理错误
    server = NULL;
} else {
    for (;;) {
        uv_run(uv_default_loop(), UV_RUN_DEFAULT);
    }
}
return 0;

} ```

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】