我在我的项目中实现了JSON导出功能.前面,我在内存中构建JSON(通过将数据存储在 struct 中),并使用serde_json::to_string(data)将它们写入目标文件.但是现在JSON struct 变得太大,内存无法容纳,因此我使用数据库streaming一次处理一行.

我想要生成的JSON具有如下 struct :

{
   "measurements": [
      { "timestamp": "2023-10-23", "value": 123.54 },
      { "timestamp": "2023-10-24", "value": 123.54 },
      // a lot more similar entries
   ],   
   "media": [
      { "name": "Ugly Love", "author": "Colleen Hoover" },
      { "name": "Harry Potter", "author": "JK Rowling" },
      // a lot more similar entries
   ]
}

如何将来自数据库的数据流传输到json文件中?

推荐答案

如果不一次将大量JSON数据存储在内存中,就很难将大量的JSON数据从数据库传输到文件中,尤其是在数据具有分层 struct 的情况下.为了实现这一点,您必须保留正确的JSON格式,同时在从数据库获取数据时逐渐将JSON写入文件.

Rust中的例子,假设您有一个名为stream_from_db的返回行的数据库函数,以及一个名为serde_json::to_string的序列化方法.

use serde_json;
use std::fs::File;
use std::io::{Write, BufWriter};

let file = File::create("output.json").unwrap();
let mut writer = BufWriter::new(file);

writer.write_all(b"{\"measurements\": [").unwrap();

let mut first = true;
for measurement in stream_from_db("measurements") {
    if !first {
        writer.write_all(b", ").unwrap();
    }
    first = false;

    let json = serde_json::to_string(&measurement).unwrap();
    writer.write_all(json.as_bytes()).unwrap();
}

writer.write_all(b"], \"media\": [").unwrap();

let mut first = true;
for media in stream_from_db("media") {
    if !first {
        writer.write_all(b", ").unwrap();
    }
    first = false;

    let json = serde_json::to_string(&media).unwrap();
    writer.write_all(json.as_bytes()).unwrap();
}

writer.write_all(b"]}").unwrap();

Json相关问答推荐

如何获取brew list作为JSON输出

如何使用GoFr返回XML响应?

给定一个包含两个数组的JSON输入文件,如何使用Jolt将一个数组中的每个元素与另一个数组组合在一起?

在Ruby的json中压缩单个字段

根据值过滤输入的JSON并使用它准备预期的输出

德纳比可视化区域图表 Power BI

使用Powershell将JSON文件加载到SQL Server表格

在Databricks中如何将JSON文件作为字典读取

使用本地 JSON api react TS Axios

如何在 wso2 中组合 2 个 json 有效负载?

PowerShell - JSON/PsCustomObject - 为什么我的数组被扁平化为一个对象?

JQuery,使用 GET 方法发送 JSON 对象

SyntaxError:Object.parse(本机)AngularJS中的意外标记o

Jackson 的@JsonView、@JsonFilter 和 Spring

Laravel5 Json 获取文件内容

如何在 django rest 框架中定义列表字段?

有必要清理 JSON 吗?

Jackson:忽略 Json 配置值

Jackson JSON序列化,通过级别定义避免递归

将 JsonArray 添加到 JsonObject