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

加油站收据JSON文件存储与读取异常问题求助

问题分析

你当前的问题出在写入逻辑:每次新增收据时,都创建一个仅包含单条收据的List<Receipts>,序列化后直接追加到文件末尾。这导致文件里出现了两个独立的JSON数组([...][...]),不符合JSON语法规范,因此读取时解析器会报错。

解决方案

1. 先修复已损坏的JSON文件

打开你的收据JSON文件,将两个数组中间的][替换为, ,把它们合并成一个合法的数组结构:

[
  {
    "pricePerL": 10.22,
    "ID": "NH1164DTDE",
    "amount": 10.0,
    "tax": 25.5500011,
    "totalPrice": 102.200005,
    "time": "01.20.2023 13:12",
    "sort": "beznin",
    "typeOfPayment": "card",
    "employee": "Denis"
  },
  {
    "ID": "300FIMTU7U",
    "sort": "disel",
    "employee": "Denis",
    "amount": 150.0,
    "pricePerL": 13.24,
    "tax": 496.5,
    "totalPrice": 1986.0,
    "typeOfPayment": "cash",
    "time": "01.20.2023 13:19"
  }
]

2. 修改写入逻辑(核心修复)

不要每次追加新的数组,而是先读取文件中已有的所有收据,将新收据加入后再整体写入:

// 新增收据的方法
void AddReceipt(Receipts newReceipt, string receiptFile)
{
    List<Receipts> allReceipts = new List<Receipts>();
    
    // 如果文件已存在,读取现有数据
    if (File.Exists(receiptFile))
    {
        string existingJson = File.ReadAllText(receiptFile);
        allReceipts = JsonConvert.DeserializeObject<List<Receipts>>(existingJson);
    }
    
    // 添加新收据
    allReceipts.Add(newReceipt);
    
    // 序列化并覆盖写入文件(注意是WriteAllText,不是Append)
    string updatedJson = JsonConvert.SerializeObject(allReceipts, Formatting.Indented);
    File.WriteAllText(receiptFile, updatedJson);
}

3. 确保读取逻辑正确

你的读取函数需要先从文件加载数据,再传入遍历:

static void pregledRacuna(string receiptFile)
{
    try
    {
        if (!File.Exists(receiptFile))
        {
            Console.WriteLine("收据文件不存在");
            return;
        }
        
        string jsonContent = File.ReadAllText(receiptFile);
        List<Receipts> racuniLista = JsonConvert.DeserializeObject<List<Receipts>>(jsonContent);
        
        foreach (Receipts r in racuniLista)
        {
            // 输出ID和时间示例
            Console.WriteLine($"收据ID: {r.ID}, 时间: {r.time}");
        }
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
    }
}
额外建议
  • 如果收据数量很大,读取整个列表可能影响性能,此时可以考虑使用JSON Lines格式(每条收据占一行,无需外层数组),但需要调整读写逻辑。
  • 操作文件时建议加锁,避免多线程同时写入导致文件损坏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:25:43