FastAPI高级实践:高效上传文件与复杂JSON数据(含列表和字典)

FastAPI高级实践:高效上传文件与复杂JSON数据(含列表和字典)

本教程深入探讨了在FastAPI中同时上传文件和包含列表、字典等复杂结构的JSON数据时遇到的挑战及解决方案。文章详细阐述了422 Unprocessable Entity错误的原因,并提供了两种基于Pydantic BaseModel的专业方法,通过将JSON数据作为表单字符串或利用Pydantic的验证器,有效实现文件与复杂JSON数据的协同上传,并附带详细代码示例和使用说明。

1. 引言

fastapi以其高性能和易用性,已成为构建现代web api的热门选择。在实际应用中,我们经常需要处理文件上传,同时还需要接收包含复杂结构(如列表、字典嵌套)的json数据。然而,直接将文件和pydantic模型作为请求体参数混合使用时,开发者常常会遇到422 unprocessable entity错误。本教程将深入分析导致这些问题的原因,并提供两种专业且健壮的解决方案,帮助您高效地在fastapi中实现文件与复杂json数据的协同上传。

2. 理解挑战:为什么会遇到422错误?

在FastAPI中,当您尝试同时上传文件(UploadFile = File(…))和一个基于Pydantic BaseModel的复杂JSON数据时,通常会遇到422 Unprocessable Entity错误。这背后的原因主要有以下几点:

2.1 Pydantic模型与查询参数的限制

列表型查询参数需要明确声明: 如果您的Pydantic模型中包含List类型的字段,且这些字段是作为查询参数(而非请求体)传递的,您需要使用Field(Query(…))进行明确声明。例如,words: List[str] = Field(Query(…))。否则,FastAPI可能无法正确解析。复杂对象列表不能作为查询参数: 像List[BaseBox]这样包含字典或Pydantic模型的列表,不能作为查询参数传递。HTTP协议的查询字符串设计不适合传递这种复杂结构。如果您尝试这样做,FastAPI会抛出断言错误,指出此类参数“只能是请求体(request body)”。

2.2 HTTP协议与数据编码冲突

这是核心问题。当您的FastAPI端点包含file: UploadFile = File(…)这样的参数时,FastAPI会将预期的请求体编码类型设置为multipart/form-data。这种编码方式通常用于发送文件和简单的表单字段。

然而,当您同时尝试通过Pydantic BaseModel接收一个JSON对象作为请求体时,FastAPI通常期望的编码类型是application/json。HTTP协议标准不允许在同一个请求体中同时使用multipart/form-data和application/json两种编码。因此,当FastAPI接收到一个multipart/form-data请求,但其中又包含一个它期望解析为application/json的Pydantic模型时,就会发生解析错误,导致422 Unprocessable Entity。

2.3 GET请求的限制

此外,值得注意的是,HTTP GET或HEAD请求方法不应包含请求体。GET请求应仅用于请求数据,不应附带数据。因此,如果您尝试在GET请求中发送Pydantic模型作为请求体,FastAPI也会报错。文件上传通常是POST请求,但理解这一限制也很重要。

3. 核心概念与解决方案

为了克服上述挑战,我们需要采用一些策略来确保文件和复杂JSON数据都能被正确地打包和解析。核心思想是:将复杂的JSON数据序列化为字符串,作为multipart/form-data中的一个普通表单字段进行传输,然后在服务器端进行反序列化。

3.1 处理列表型查询参数

在继续讨论文件和JSON混合上传之前,先明确如何正确处理列表型查询参数,这在某些场景下仍然适用。

from typing import List, Optionalfrom pydantic import BaseModel, Fieldfrom fastapi import Queryclass QueryParams(BaseModel):    width: Optional[float] = Field(None)    height: Optional[float] = Field(None)    words: List[str] = Field(Query(...)) # 明确声明为列表查询参数

上述QueryParams模型可以作为依赖注入到FastAPI端点中,用于解析URL中的查询参数,例如:/submit?width=10&words=apple&words=banana。

3.2 解决文件与JSON数据混合上传的策略

以下是两种在FastAPI中同时上传文件和复杂JSON数据的推荐策略。

策略一:将JSON数据作为表单字符串传输并手动解析

这种方法的核心是将复杂的JSON对象序列化为一个JSON字符串,然后将其作为multipart/form-data请求中的一个普通文本字段(Form参数)发送。在服务器端,我们定义一个自定义依赖项(Depends),负责接收这个字符串并将其反序列化为Pydantic模型。

优点:

逻辑清晰,JSON解析过程明确。兼容性较好,客户端只需将JSON对象转换为字符串即可。

缺点:

在FastAPI的交互式API文档(Swagger UI)中,JSON字段会显示为一个普通的字符串输入框,缺乏自动生成的JSON结构示例,用户体验稍差。客户端需要手动将JSON对象序列化为字符串。

代码示例 (app.py):

from fastapi import FastAPI, status, Form, UploadFile, File, Depends, Query, HTTPExceptionfrom pydantic import BaseModel, Field, ValidationErrorfrom fastapi.encoders import jsonable_encoderfrom typing import Optional, Listimport jsonapp = FastAPI()# 定义查询参数模型class BaseParams(BaseModel):    width: Optional[float] = Field(None)    height: Optional[float] = Field(None)    words: List[str] = Field(Query(...)) # 列表型查询参数# 定义嵌套的JSON对象模型class BaseBox(BaseModel):    l: float = Field(...)    t: float = Field(...)    r: float = Field(...)    b: float = Field(...)# 定义复杂的JSON数据模型class Base(BaseModel):    boxes: List[BaseBox] = Field(...)    comments: List[str] = Field(...)    code: int = Field(...)# 自定义依赖项,用于解析作为表单字符串传输的JSON数据def parse_json_form_data(data: str = Form(...)):    try:        # 尝试将字符串解析为Base模型        return Base.model_validate_json(data)    except ValidationError as e:        # 如果解析失败,抛出422错误        raise HTTPException(            detail=jsonable_encoder(e.errors()),            status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,        )@app.post("/submit")def submit(    base_params: BaseParams = Depends(),      # 依赖注入查询参数    base: Base = Depends(parse_json_form_data), # 依赖注入解析后的JSON数据    files: List[UploadFile] = File(...),      # 接收文件列表):    """    接收查询参数、JSON数据(作为表单字符串)和文件列表。    """    return {        "Params": base_params,        "JSON Payload": base,        "Filenames": [file.filename for file in files],    }# 启动应用:uvicorn app:app --reload

客户端请求示例:

当使用curl或其他HTTP客户端发送请求时,需要将Base模型的数据序列化为JSON字符串,并作为multipart/form-data中的一个字段发送。

curl -X 'POST'   'http://localhost:8000/submit?width=10.5&height=20.0&words=hello&words=world'   -H 'accept: application/json'   -H 'Content-Type: multipart/form-data'   -F 'data={"boxes": [{"l": 0,"t": 0,"r": 0,"b": 0}, {"l": 10,"t": 10,"r": 20,"b": 20}], "comments": ["foo", "bar"], "code": 123}'   -F 'files=@./test_image.png;type=image/png'   -F 'files=@./another_file.txt;type=text/plain'

data: 包含序列化JSON字符串的表单字段。files: 包含要上传的文件。

策略二:利用Pydantic的model_validator优化JSON数据解析

这种方法与策略一类似,但它利用Pydantic v2的model_validator(或Pydantic v1的@root_validator)在模型实例化之前对传入的数据进行预处理。如果传入的是字符串,model_validator会尝试将其解析为JSON。结合Body(…)使用,可以使FastAPI在Swagger UI中更好地展示JSON模型的结构。

优点:

Swagger UI对JSON数据有更好的展示和自动生成示例,用户体验更佳。客户端发送请求时,如果Content-Type允许,可以直接发送结构化JSON(但在multipart/form-data场景下,仍需发送字符串)。代码更简洁,将解析逻辑封装在Pydantic模型内部。

缺点:

需要Pydantic v2或更高版本才能使用model_validator。model_validator的实现对于初学者可能略显复杂。

代码示例 (app.py):

from fastapi import FastAPI, Body, UploadFile, File, Depends, Query, HTTPExceptionfrom pydantic import BaseModel, Field, model_validator, ValidationErrorfrom typing import Optional, Listimport jsonapp = FastAPI()# 定义查询参数模型class BaseParams(BaseModel):    width: Optional[float] = Field(None)    height: Optional[float] = Field(None)    words: List[str] = Field(Query(...))# 定义嵌套的JSON对象模型class BaseBox(BaseModel):    l: float = Field(...)    t: float = Field(...)    r: float = Field(...)    b: float = Field(...)# 定义复杂的JSON数据模型,并添加model_validatorclass Base(BaseModel):    boxes: List[BaseBox] = Field(...)    comments: List[str] = Field(...)    code: int = Field(...)    # Pydantic v2的model_validator,在模型实例化前对值进行预处理    @model_validator(mode="before")    @classmethod    def validate_to_json(cls, value):        if isinstance(value, str):            try:                return cls(**json.loads(value))            except json.JSONDecodeError as e:                raise ValueError(f"Invalid JSON string for Base model: {e}")        return value@app.post("/submit")def submit(    base_params: BaseParams = Depends(), # 依赖注入查询参数    base: Base = Body(...),              # Pydantic模型作为请求体,由model_validator处理    files: List[UploadFile] = File(...), # 接收文件列表):    """    接收查询参数、JSON数据(由model_validator处理)和文件列表。    """    return {        "Params": base_params,        "JSON Payload": base,        "Filenames": [file.filename for file in files],    }# 启动应用:uvicorn app:app --reload

客户端请求示例:

与策略一类似,客户端仍然需要将JSON数据序列化为字符串,并作为multipart/form-data中的一个字段发送。Body(…)结合model_validator使得FastAPI能够处理这种字符串形式的JSON输入。

curl -X 'POST'   'http://localhost:8000/submit?width=10.5&height=20.0&words=alpha&words=beta'   -H 'accept: application/json'   -H 'Content-Type: multipart/form-data'   -F 'base={"boxes": [{"l": 0,"t": 0,"r": 0,"b": 0}], "comments": ["hello", "world"], "code": 456}'   -F 'files=@./document.pdf;type=application/pdf'

base: 包含序列化JSON字符串的表单字段。files: 包含要上传的文件。

4. 总结与注意事项

通过本教程,我们深入探讨了在FastAPI中同时上传文件和复杂JSON数据时可能遇到的422 Unprocessable Entity错误的原因,并提供了两种有效的解决方案。

核心冲突: 理解multipart/form-data和application/json在同一请求体中的编码冲突是解决问题的关键。策略选择:策略一(表单字符串与手动解析):适用于对Swagger UI展示要求不高,或偏好明确分离解析逻辑的场景。策略二(model_validator优化解析):提供更好的Swagger UI体验,将解析逻辑内聚于Pydantic模型,代码更优雅,但需要Pydantic v2。客户端配合: 无论选择哪种策略,客户端在构建multipart/form-data请求时,都必须将复杂的JSON数据序列化为字符串,并作为表单字段发送。Pydantic的强大: Pydantic的Field(Query(…))和model_validator等功能为处理复杂数据结构提供了极大的灵活性和便利性。

选择哪种策略取决于您的具体项目需求和团队偏好。通过这些方法,您可以有效地构建出能够同时处理文件和复杂结构化数据的FastAPI服务,提升应用的健壮性和用户体验。

以上就是FastAPI高级实践:高效上传文件与复杂JSON数据(含列表和字典)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1372549.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Llama Index自定义嵌入:深入理解查询与文本嵌入的异同
上一篇 2025年12月14日 12:24:49
python中如何将字典转换为JSON字符串_Python字典转JSON字符串操作
下一篇 2025年12月14日 12:25:05

相关推荐

  • 怎么用豆包AI帮我写Redis操作代码 Redis操作代码的AI编写技巧

    怎么用豆包AI帮我写Redis操作代码 Redis操作代码的AI编写技巧怎么用豆包AI帮我写Redis操作代码 Redis操作代码的AI编写技巧怎么用豆包AI帮我写Redis操作代码 Redis操作代码的AI编写技巧怎么用豆包AI帮我写Redis操作代码 Redis操作代码的AI编写技巧

    明确提问和引导是用豆包ai写好redis操作代码的关键。1. 先说明使用的编程语言和redis客户端库,如python的redis-py、node.js的ioredis或go的go-redis;2. 指定具体操作类型,如字符串、哈希、列表等,并说明是读还是写操作;3. 结合业务场景提问,例如缓存、限…

    2026年9月28日 • 用户投稿
    500
  • sublime怎么设置字体渲染_Sublime字体抗锯齿与渲染效果优化

    sublime怎么设置字体渲染_Sublime字体抗锯齿与渲染效果优化sublime怎么设置字体渲染_Sublime字体抗锯齿与渲染效果优化sublime怎么设置字体渲染_Sublime字体抗锯齿与渲染效果优化sublime怎么设置字体渲染_Sublime字体抗锯齿与渲染效果优化

    启用ClearType提升Windows下字体清晰度;2. 在Sublime中设置合适字体与subpixel_antialias;3. 避免非整数缩放防模糊;4. 可选Fira Code连字字体优化可读性。 Sublime Text 的字体渲染效果直接影响编码体验,清晰锐利的字体能减轻视觉疲劳。默认…

    2026年9月28日 • 用户投稿
    000
  • 飞书账号登录异常如何解决

    飞书账号登录异常如何解决飞书账号登录异常如何解决飞书账号登录异常如何解决飞书账号登录异常如何解决

    飞书登录异常多因密码错误、网络问题或安全策略触发。2. 应检查网络稳定性并更新至最新客户端版本。3. 确认账号信息准确,通过“忘记密码”重置或使用验证码登录。4. 账号可能因频繁失败被锁定,需等待或解封,企业限制则联系IT。5. 尝试短信验证、扫码或第三方方式登录,并换设备或网页端测试。6. 仍无法…

    2026年9月28日 • 用户投稿
    600
  • 华为技术专家居然把JVM内存模型讲解这么细致「建议收藏」

    华为技术专家居然把JVM内存模型讲解这么细致「建议收藏」华为技术专家居然把JVM内存模型讲解这么细致「建议收藏」华为技术专家居然把JVM内存模型讲解这么细致「建议收藏」华为技术专家居然把JVM内存模型讲解这么细致「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着os和应用程序的实时运行。 JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM高效稳定运行。不同JVM对于内存的划分方式和管理机制存在差异。结合JVM虚拟机规范,来…

    2026年9月28日 • 用户投稿
    100
  • 为什么iPhoneSE2收款语音不工作?解决微信语音播报的详细方法

    为什么iPhoneSE2收款语音不工作?解决微信语音播报的详细方法为什么iPhoneSE2收款语音不工作?解决微信语音播报的详细方法为什么iPhoneSE2收款语音不工作?解决微信语音播报的详细方法为什么iPhoneSE2收款语音不工作?解决微信语音播报的详细方法

    iPhone SE2微信收款语音不工作,通常是软件设置问题而非硬件故障。首先检查手机左侧静音拨片是否关闭,确保系统音量足够大,并进入“设置”>“声音与触感”确认“铃声与提醒”音量正常且“用按钮调整”已开启。接着检查控制中心是否有勿扰模式或专注模式启用,若有则关闭,并进入“设置”>“专注”…

    2026年9月28日 • 用户投稿
    100
  • 360极速浏览器如何完全清除浏览数据_彻底清理缓存历史记录等上网痕迹

    360极速浏览器如何完全清除浏览数据_彻底清理缓存历史记录等上网痕迹360极速浏览器如何完全清除浏览数据_彻底清理缓存历史记录等上网痕迹360极速浏览器如何完全清除浏览数据_彻底清理缓存历史记录等上网痕迹360极速浏览器如何完全清除浏览数据_彻底清理缓存历史记录等上网痕迹

    首先通过设置菜单清除浏览数据,进入“更多工具”选择“清除上网痕迹”,勾选历史记录、缓存、Cookie等项后立即清除;其次手动删除用户数据文件夹,关闭浏览器后在%localappdata%360ChromeChromeUser Data路径下重命名或删除Default文件夹;再使用CCleaner等系…

    2026年9月28日 • 用户投稿
    000
  • Ollama 上线 “Web search” API,为 LLM 集成实时网络搜索能力

    Ollama 上线 “Web search” API,为 LLM 集成实时网络搜索能力Ollama 上线 “Web search” API,为 LLM 集成实时网络搜索能力Ollama 上线 “Web search” API,为 LLM 集成实时网络搜索能力Ollama 上线 “Web search” API,为 LLM 集成实时网络搜索能力

    ollama 正式发布“web search”api,使大语言模型具备实时获取互联网信息的能力,显著提升回答准确率并有效降低幻觉现象。 该功能以 REST API 形式开放,并已深度集成至 Ollama 的 Python 和 JavaScript SDK 中,便于开发者在各类应用中快速接入与调用。同…

    2026年9月28日 • 用户投稿
    100
  • 拼多多拼团无法参加怎么办

    拼多多拼团无法参加怎么办拼多多拼团无法参加怎么办拼多多拼团无法参加怎么办拼多多拼团无法参加怎么办

    先检查账号和商品状态,确认账号未受限、支付方式已绑定且商品可参团;再尝试加入其他正在进行的团或让朋友分享链接;排除网络问题并更新APP版本;最后联系客服解决系统故障导致的拼团失败。 遇到拼多多拼团无法参加的情况,别急着放弃。大部分问题都能通过几个简单步骤解决,从检查基础设置到联系客服都有对应办法。 …

    2026年9月28日 • 用户投稿
    100
  • windows怎么开启ahci模式 windows bios开启ahci模式教程

    windows怎么开启ahci模式 windows bios开启ahci模式教程windows怎么开启ahci模式 windows bios开启ahci模式教程windows怎么开启ahci模式 windows bios开启ahci模式教程windows怎么开启ahci模式 windows bios开启ahci模式教程

    首先修改注册表启用AHCI驱动,导航至msahci和iaStorV项将Start值改为0;随后进入BIOS将SATA模式从IDE更改为AHCI;若无法进系统,可通过Windows安装U盘在命令提示符中加载注册表并配置启动项,确保系统能正常识别AHCI模式,避免蓝屏或启动失败。 如果您在安装或重装Wi…

    2026年9月28日 • 用户投稿
    100
  • 怎么用豆包AI帮我优化Flutter渲染 让AI提升移动端性能的5个方案

    怎么用豆包AI帮我优化Flutter渲染 让AI提升移动端性能的5个方案怎么用豆包AI帮我优化Flutter渲染 让AI提升移动端性能的5个方案怎么用豆包AI帮我优化Flutter渲染 让AI提升移动端性能的5个方案怎么用豆包AI帮我优化Flutter渲染 让AI提升移动端性能的5个方案

    豆包ai能有效优化flutter应用的渲染性能,具体方法包括:1. 分析渲染瓶颈,识别冗余构建、过度嵌套和不必要的setstate,并建议拆分复杂widget、使用const关键字及避免在build中做耗时操作;2. 生成高效代码片段,如优化图片加载逻辑,提升内存管理和复用效率;3. 优化状态管理逻…

    2026年9月28日 • 用户投稿
    000
  • Java并发编程:掌握Future、线程安全与原子操作

    Java并发编程:掌握Future、线程安全与原子操作Java并发编程:掌握Future、线程安全与原子操作Java并发编程:掌握Future、线程安全与原子操作Java并发编程:掌握Future、线程安全与原子操作

    本教程深入探讨在Java并发编程中,如何避免将Future对象错误地用于存储可变数据,并详细指导如何正确地管理ExecutorService生命周期以及利用AtomicIntegerArray等并发工具实现线程安全的共享数组元素更新,确保数据一致性。 1. 理解Future的本质与误用 在java并…

    2026年9月28日 • 用户投稿
    000
  • 百度智能云 Qianfan-VL 系列模型重磅开源!全尺寸领域增强效果优异,全自研芯片计算!

    百度智能云 Qianfan-VL 系列模型重磅开源!全尺寸领域增强效果优异,全自研芯片计算!百度智能云 Qianfan-VL 系列模型重磅开源!全尺寸领域增强效果优异,全自研芯片计算!百度智能云 Qianfan-VL 系列模型重磅开源!全尺寸领域增强效果优异,全自研芯片计算!百度智能云 Qianfan-VL 系列模型重磅开源!全尺寸领域增强效果优异,全自研芯片计算!

    今天,百度智能云千帆正式推出全新视觉理解模型——qianfan-vl,并全面开源!该系列模型包含3b、8b和70b三个尺寸版本,是面向企业级多模态应用场景,进行了深度优化的视觉理解大模型。即日起至10月10日,用户可在百度智能云千帆平台免费体验8b、70b模型。qianfan-vl不仅具备出色的基础…

    2026年9月28日 • 用户投稿
    100
  • 并发编程中Future对象使用不当及解决方案

    并发编程中Future对象使用不当及解决方案并发编程中Future对象使用不当及解决方案并发编程中Future对象使用不当及解决方案并发编程中Future对象使用不当及解决方案

    本文针对Java并发编程中常见的set<int, Future> is not applicable to arguments (int,int)错误,深入剖析了其产生的原因,即试图将整型值直接赋值给存储Future对象的集合。文章将详细阐述Future对象的特性,并提供正确的解决方案,…

    2026年9月28日 • 用户投稿
    000
  • 苹果用户DeepSeek轻松上手操作指南

    苹果用户DeepSeek轻松上手操作指南苹果用户DeepSeek轻松上手操作指南苹果用户DeepSeek轻松上手操作指南苹果用户DeepSeek轻松上手操作指南

    苹果用户可在官网下载deepseek并手动信任安装;登录推荐用微信或邮箱;功能使用需根据需求切换模式和设置。具体步骤为:1. 访问官网下载对应ios/mac版本,前往设备管理中信任开发者证书;2. 登录时选择微信扫码或邮箱注册,团队用户可选企业账号;3. 使用前调整设置,如切换模型模式、开启历史记录…

    2026年9月28日 • 用户投稿
    200
  • 飞书桌面端闪退问题 飞书程序错误修复办法

    飞书桌面端闪退问题 飞书程序错误修复办法飞书桌面端闪退问题 飞书程序错误修复办法飞书桌面端闪退问题 飞书程序错误修复办法飞书桌面端闪退问题 飞书程序错误修复办法

    飞书桌面端闪退多由兼容性、缓存或系统冲突引起,可依次尝试:设置兼容模式运行、更新或重装最新版飞书、回退系统更新;清除AppData路径下的缓存文件;以管理员身份运行sfc和DISM命令修复系统文件;关闭安全软件测试并添加飞书白名单;检查隐私权限设置。按顺序排查基本可解决。 飞书桌面端闪退确实挺烦人,…

    2026年9月27日 • 用户投稿
    100
  • 夸克会员有什么用_夸克会员权益与功能详解

    夸克会员有什么用_夸克会员权益与功能详解夸克会员有什么用_夸克会员权益与功能详解夸克会员有什么用_夸克会员权益与功能详解夸克会员有什么用_夸克会员权益与功能详解

    夸克SVIP会员提供6TB云存储、下载速率高达50MB/s、多格式在线预览、智能剪贴板捕获、自动备份手机相册与聊天记录、回收站保留60天及批量文件管理功能,全面提升使用体验。 如果您在使用夸克时发现部分文件下载缓慢、存储空间不足或无法访问某些高级功能,这可能是因为您尚未开通会员服务。以下是关于夸克会…

    2026年9月27日 • 用户投稿
    100
  • 在抖音的小程序中,如何取消订单?简单操作指南

    在抖音的小程序中,如何取消订单?简单操作指南在抖音的小程序中,如何取消订单?简单操作指南在抖音的小程序中,如何取消订单?简单操作指南在抖音的小程序中,如何取消订单?简单操作指南

    抖音小程序为用户带来了流畅的购物体验,但有时因各种原因您可能需要取消已下单的商品。本文将为您详细介绍如何快速、顺利地完成订单取消流程。 登录抖音小程序 请先打开抖音APP,进入对应的小程序页面,并确保已使用您的账号成功登录,以便查看个人订单信息。 查找目标订单 进入“我的订单”页面: 在小程序首页,…

    2026年9月27日 • 用户投稿
    000
  • DeepSeek 与 ChatGPT 有什么区别 特性对比与选型建议

    DeepSeek 与 ChatGPT 有什么区别 特性对比与选型建议DeepSeek 与 ChatGPT 有什么区别 特性对比与选型建议DeepSeek 与 ChatGPT 有什么区别 特性对比与选型建议DeepSeek 与 ChatGPT 有什么区别 特性对比与选型建议

    deepseek和chatgpt的主要区别在于训练数据、模型架构、擅长领域及应用场景。1. deepseek侧重代码生成与数学推理,适合编程及逻辑任务;2. chatgpt擅长自然语言处理与文本生成,适用于对话、写作等场景;3. 选型应根据项目核心需求决定,若重代码理解选deepseek,若重语言表…

    2026年9月27日 • 用户投稿
    100
  • sublime怎么记住上一次打开的文件_Sublime记忆上次会话与文件设置

    sublime怎么记住上一次打开的文件_Sublime记忆上次会话与文件设置sublime怎么记住上一次打开的文件_Sublime记忆上次会话与文件设置sublime怎么记住上一次打开的文件_Sublime记忆上次会话与文件设置sublime怎么记住上一次打开的文件_Sublime记忆上次会话与文件设置

    Sublime Text 能自动恢复上次打开的文件和布局,需确保设置正确。首先在 Preferences → Settings 用户配置中添加 “remember_open_files”: true 和 “hot_exit”: false,前者保证恢复…

    2026年9月27日 • 用户投稿
    000
  • 从一副牌中抽取唯一牌的正确方法(Java)

    从一副牌中抽取唯一牌的正确方法(Java)从一副牌中抽取唯一牌的正确方法(Java)从一副牌中抽取唯一牌的正确方法(Java)从一副牌中抽取唯一牌的正确方法(Java)

    本文旨在解决在Java中使用递归函数从一副牌中抽取唯一牌时出现的java.lang.StackOverflowError问题。通过分析错误原因,提供正确的代码示例,并详细解释了如何避免该错误,确保每次抽取的牌都是唯一的。本文将帮助读者理解递归的正确使用方式以及如何优化代码以提高效率。 问题分析 原始…

    2026年9月27日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信