You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中不加载文件到内存,追加内存JSON到换行分隔JSON文件

Rust中高效追加换行分隔JSON到文件(不加载整个文件)

场景说明

现有一个换行分隔的JSON文件,内容如下:

{"name":"butthead"}
{"name":"second-butthead"}
{"name":"third-butthead"}

内存中已加载一条JSON数据:

{"name":"fourth-butthead"}

需要将内存中的数据追加到文件末尾,最终文件内容符合换行分隔格式,且全程不读取整个文件到内存。


实现方案

直接写入JSON字符串(标准库即可)

如果内存中的数据已经是JSON字符串,直接用标准库的文件操作即可实现追加:

use std::fs::OpenOptions;
use std::io::{self, Write};

// 封装追加逻辑的函数
fn append_json_str(file_path: &str, json_str: &str) -> io::Result<()> {
    // 以追加模式打开文件,文件不存在则自动创建
    let mut file = OpenOptions::new()
        .create(true)
        .append(true)
        .open(file_path)?;

    // 写入JSON字符串并追加换行符,保证格式统一
    writeln!(file, "{}", json_str)?;

    Ok(())
}

fn main() -> io::Result<()> {
    // 内存中的JSON字符串
    let target_json = r#"{"name":"fourth-butthead"}"#;
    // 调用函数追加到指定文件
    append_json_str("your_target_file.json", target_json)?;
    Ok(())
}

从结构体序列化后追加(配合serde)

如果内存中的数据是Rust结构体,可通过serde和serde_json序列化后再追加:

首先在Cargo.toml中添加依赖:

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

然后编写代码:

use serde::Serialize;
use std::fs::OpenOptions;
use std::io::{self, Write};

// 定义对应JSON结构的结构体
#[derive(Serialize)]
struct Person {
    name: String,
}

fn append_json_data<T: Serialize>(file_path: &str, data: &T) -> io::Result<()> {
    let mut file = OpenOptions::new()
        .create(true)
        .append(true)
        .open(file_path)?;

    // 将结构体序列化为JSON字符串
    let json_str = serde_json::to_string(data)?;
    // 写入文件并添加换行
    writeln!(file, "{}", json_str)?;

    Ok(())
}

fn main() -> io::Result<()> {
    // 内存中的结构体数据
    let person = Person {
        name: "fourth-butthead".to_string(),
    };
    append_json_data("your_target_file.json", &person)?;
    Ok(())
}

核心要点

  • 使用OpenOptions::append(true)打开文件时,操作系统会直接将文件指针定位到末尾,无需读取原文件内容,完全符合"不加载整个文件"的要求。
  • writeln!宏自动添加换行符,确保新的JSON条目单独占一行,维持换行分隔JSON的格式规范。
  • 两种方案都仅在内存中保留待写入的单条数据,内存占用极低,适合处理大文件。

内容的提问来源于stack exchange,提问作者sneakycrow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:00:52