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

技术问询:接收客户端数据后无法实现JSON追加写入文件,写入功能失效

解决文件追加写入及JSON写入问题

我来帮你梳理下代码里的问题,以及对应的修复方案:

核心问题分析

  1. 文件打开模式错误:你用了'w'模式打开文件,这个模式每次都会清空原有文件内容并重新写入,自然会覆盖之前的数据。要实现追加,必须用'a'(追加模式)。
  2. JSON写入方式不当:你已经把接收的二进制数据解码成了UTF-8字符串,直接用json.dump()会把这个字符串作为JSON值写入(比如原数据是"hello",写入后会变成"\"hello\""),这不是你想要的效果。如果接收的是JSON格式的数据,需要先解析成Python对象再写入;如果只是要保存原始文本,直接用write()即可。

修复方案

根据你的需求(保留历史数据、支持后续搜索和表格功能),分两种场景给出代码:

场景1:接收的是JSON格式数据(推荐用于结构化存储)

如果客户端发送的是完整的JSON对象/数组,比如{"id":1, "content":"test"},可以这样写:

import json

while True:
    data = s.recv(1024).decode('utf-8')
    if data:
        try:
            # 将字符串解析为Python数据结构
            parsed_data = json.loads(data)
            # 用追加模式打开文件,指定编码避免乱码
            with open("data.txt", 'a', encoding='utf-8') as f:
                # 写入JSON数据
                json.dump(parsed_data, f, ensure_ascii=False)
                # 每次写入后加换行,方便后续逐行读取解析
                f.write('\n')
        except json.JSONDecodeError:
            print(f"警告:收到无效的JSON数据,已跳过:{data}")

场景2:接收的是普通文本数据

如果只是要保存原始文本,不需要JSON结构化,直接追加即可:

while True:
    data = s.recv(1024).decode('utf-8')
    if data:
        with open("data.txt", 'a', encoding='utf-8') as f:
            # 写入原始文本
            f.write(data)
            # 每次追加后添加空格(按你的需求调整)
            f.write(' ')

额外注意事项

  • 流式数据处理:网络传输是流式的,recv(1024)可能只收到部分数据(比如一个大的JSON被拆成多次接收),这时候直接解析会报错。如果遇到这种情况,你需要先缓存数据,直到确认收到完整的数据包(比如约定用换行符分隔每条数据,或者发送数据前先传长度)。
  • 编码显式指定:打开文件时加上encoding='utf-8',避免不同操作系统下的默认编码差异导致乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:24:17