Skip to content

secretxuan/json

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SimpleJSON - 教学用 C++ JSON 库

项目简介

这是一个简化的 C++ JSON 解析库,通过这个项目,可以学习:

  • C++ 项目的标准目录结构
  • 头文件与源文件的分离
  • 面向对象设计
  • 递归下降解析器的实现
  • 现代 C++ 特性(智能指针、移动语义等)
  • CMake 构建系统
  • 单元测试

项目结构

json/
├── CMakeLists.txt          # CMake 构建配置
├── README.md               # 项目说明文档
├── include/                # 公共头文件目录
│   └── json/
│       ├── json.h          # JSON 值类型定义
│       ├── parser.h        # JSON 解析器
│       └── serializer.h    # JSON 序列化器
├── src/                    # 源文件目录
│   ├── json.cpp            # JSON 值实现
│   ├── parser.cpp          # 解析器实现
│   └── serializer.cpp      # 序列化器实现
├── examples/               # 示例代码
│   ├── basic_usage.cpp     # 基本使用示例
│   └── CMakeLists.txt      # 示例构建配置
├── tests/                  # 单元测试
│   ├── test_json.cpp       # JSON 值测试
│   ├── test_parser.cpp     # 解析器测试
│   └── CMakeLists.txt      # 测试构建配置
└── docs/                   # 文档目录
    └── design.md           # 设计文档

功能特性

  • ✅ 支持 JSON 基本类型:null, bool, number, string
  • ✅ 支持 JSON 复合类型:array, object
  • ✅ JSON 字符串解析
  • ✅ JSON 序列化输出
  • ✅ 友好的 C++ API

快速开始

编译项目

mkdir build
cd build
cmake ..
make

基本使用

#include "json/json.h"
#include "json/parser.h"
#include "json/serializer.h"
#include <iostream>

int main() {
    // 解析 JSON 字符串
    std::string json_str = R"({"name": "Alice", "age": 25, "active": true})";
    json::Parser parser(json_str);
    json::Value value = parser.parse();
    
    // 访问 JSON 数据
    std::cout << "Name: " << value["name"].asString() << std::endl;
    std::cout << "Age: " << value["age"].asNumber() << std::endl;
    
    // 序列化为字符串
    json::Serializer serializer;
    std::string output = serializer.serialize(value);
    std::cout << output << std::endl;
    
    return 0;
}

构建和运行示例

cd build
./examples/basic_usage

运行测试

cd build
./tests/json_tests

学习要点

1. 项目组织

  • include/ 目录存放公共头文件,便于其他项目引用
  • src/ 目录存放实现文件,隐藏实现细节
  • examples/ 提供使用示例
  • tests/ 包含单元测试

2. C++ 核心概念

  • RAII:资源获取即初始化
  • 智能指针:自动内存管理
  • 移动语义:高效的资源转移
  • 运算符重载:提供直观的 API

3. 设计模式

  • 访问者模式:处理不同类型的 JSON 值
  • 递归下降解析:解析嵌套的 JSON 结构

许可证

本项目仅用于教学目的。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors