Python JSON序列化TypeError排查:定位与修复type对象错误
1. 问题根源为什么type对象无法被序列化如果你在 Python 里和 JSON 打交道超过一周大概率见过TypeError: Object of type ‘type‘ is not JSON serializable这个错误。新手的第一反应往往是“我的字典/列表里明明没有type对象啊” 然后开始疯狂搜索“如何将自定义对象转为 JSON”结果发现网上的教程都在讲json.dumps的default参数或者自定义JSONEncoder一通操作下来问题依旧。这感觉就像你车打不着火修车师傅却一个劲地教你换轮胎。这个错误的本质是json.dumps()函数在尝试序列化一个它不认识的数据类型。Python 标准库的json模块默认只认识几种基本类型dict,list,str,int,float,bool,None。一旦遇到这几种类型之外的对象它就会“懵掉”然后抛出这个错误。而type本身就是一个 Python 的内置类型class ‘type‘它当然不在默认的可序列化名单里。但问题的关键不在于type这个类型本身而在于你的数据里某个值意外地变成了一个type对象。这通常不是你的本意而是某个操作过程中的“副作用”或“意外产物”。比如你本意是想序列化一个类实例的属性但这个属性在某种情况下被赋值为一个类class而不是类的实例。类在 Python 中就是type的实例。举个例子假设你有一个配置字典其中某个键的值本应是一个字符串比如‘model‘: ‘MyModel‘但在代码的某个环节你可能错误地进行了类似config[‘model‘] MyModel的赋值注意这里MyModel没有加括号实例化。那么config[‘model‘]的值就从字符串‘MyModel‘变成了类对象class ‘__main__.MyModel‘。当你试图用json.dumps(config)序列化整个配置字典时就会在这个位置触发上述错误。注意这里要严格区分“对象转 JSON”和“type对象错误”。前者是你主动要序列化一个自定义类的实例你知道问题在哪解决方案明确用default参数或JSONEncoder。后者是你的数据里“混入”了不该有的类型你需要的是“数据清洗”或“错误拦截”而不是改变序列化规则。本文聚焦后者。2. 核心场景与数据“污染”路径分析要解决问题先得找到“污染源”。type对象不会凭空出现在你的待序列化数据中。根据我的经验它通常通过以下几种隐蔽的路径混进来2.1 函数或类作为参数传递这是最常见也最容易被忽略的场景。在 Python 中函数function和类class都是一等公民可以作为参数传递、赋值给变量。这在设计模式或回调机制中很常见但一旦它们被不小心塞进一个最终需要被序列化为 JSON 的数据结构里错误就来了。import json def my_callback(): return “Done” data { “task”: “process_data”, “callback”: my_callback # 这里my_callback 是一个函数对象 } # 触发错误 json.dumps(data) # TypeError: Object of type ‘function‘ is not JSON serializable # 注意这里报错信息可能是‘function‘但原理和‘type‘一样。 # 如果传递的是类错误信息就是 ‘type‘。排查技巧检查你的字典或列表中的值。有没有哪个键名听起来像“handler“,“func“,“callback“,“model_class“它们的值很可能不是字符串或字典而是一个直接的函数或类引用。2.2 从模块或对象中动态获取的属性有时你会从一个模块或一个对象中根据字符串名称动态获取属性例如使用getattr()。如果这个属性恰好是一个类或函数而你未加判断就直接存入数据就会引入type或function对象。import some_module config {“processor”: None} processor_name “AdvancedProcessor” # 假设 some_module.AdvancedProcessor 是一个类 config[“processor”] getattr(some_module, processor_name) # 这里获取到的是类对象 # 后续序列化 config 就会出错2.3 数据库查询或 ORM 框架的“陷阱”在使用 SQLAlchemy、Django ORM 或 Peewee 等框架时查询结果可能包含特殊的 ORM 对象或字段类型。特别是当你尝试序列化一个包含关系字段如relationship的模型实例而这个字段可能返回的是一个查询管理器Query或Manager对象或者更隐蔽地返回了模型类本身。# 假设使用某个ORM user User.query.get(1) data { “id”: user.id, “name”: user.name, “posts”: user.posts # 如果 user.posts 是一个关系管理器或类引用而非实际列表 } # json.dumps(data) 可能失败2.4 第三方库返回的复杂对象许多科学计算库如 NumPy、Pandas、机器学习框架如 PyTorch、TensorFlow 的某些早期版本或网络请求库返回的对象其内部结构可能包含非标准 Python 类型。例如一个 NumPy 的int64、float32类型或者一个 Pandas 的Timestamp、DataFrame。虽然这些不是type对象但同样会引发not JSON serializable错误其排查思路是相通的。实操心得当错误指向‘type‘时优先检查数据中是否混入了类class或模块module引用。一个快速的方法是在调用json.dumps()之前先对你的数据进行一次“类型快照”def debug_data_types(obj, path“root“): if isinstance(obj, dict): for k, v in obj.items(): debug_data_types(v, f“{path}.{k}“) elif isinstance(obj, (list, tuple)): for i, item in enumerate(obj): debug_data_types(item, f“{path}[{i}]“) else: # 打印非基础类型的路径和类型 if not isinstance(obj, (str, int, float, bool, type(None))): print(f“{path}: {type(obj)} - {repr(obj)[:100]}“) # 在序列化前调用 debug_data_types(your_data)运行这段代码它会递归遍历你的数据结构并打印出所有非 JSON 默认类型的值的路径和具体类型。你很可能一眼就能发现那个藏在深处的type对象。3. 系统性的诊断与排查流程当错误发生时不要急于修改序列化方法。正确的做法是像一个侦探一样对数据进行系统性排查。以下是经过大量实战总结出的高效排查流程3.1 第一步精确定位“元凶”错误信息会告诉你序列化失败的对象类型是‘type‘但它不会告诉你是哪个键值对。你需要找到这个“罪魁祸首”。方法一使用json.dumps的default参数进行探测。虽然我们最终可能不靠default解决但可以巧妙利用它来定位问题。import json def find_offender(obj): “”“一个用于定位不可序列化对象的default函数”“” raise TypeError(f“Object of type {type(obj).__name__} is not serializable. Value: {repr(obj)}“) try: json.dumps(your_data, defaultfind_offender) except TypeError as e: print(f“定位到错误: {e}“)当json.dumps遇到无法处理的类型时会调用find_offender函数并立即抛出包含该对象类型和值的详细错误。这样你就能立刻知道是哪个具体的值出了问题。方法二手动递归检查。如果数据结构非常复杂或者你想获得一份完整的“问题清单”可以写一个递归检查函数def find_non_serializables(data, path““): problems [] if isinstance(data, dict): for key, value in data.items(): new_path f“{path}.{key}“ if path else key problems.extend(find_non_serializables(value, new_path)) elif isinstance(data, (list, tuple)): for idx, value in enumerate(data): new_path f“{path}[{idx}]“ problems.extend(find_non_serializables(value, new_path)) else: # 检查是否为JSON支持的基本类型 if not isinstance(data, (str, int, float, bool, type(None))): problems.append((path, type(data), repr(data)[:200])) return problems problems find_non_serializables(your_data) if problems: for path, obj_type, value in problems: print(f“路径: {path}, 类型: {obj_type}, 值(片段): {value}“) else: print(“数据结构纯净可直接序列化。“)3.2 第二步分析问题数据的来源找到问题路径例如“config.model_class“后向上回溯代码。问自己几个问题这个值最初应该是什么类型是字符串、整数、字典还是其他它是如何被赋值的查找代码中所有对该路径的赋值操作。是直接赋值、函数返回值还是从数据库/API加载的赋值过程中是否有条件分支是不是在某个if分支下错误地赋值了一个类或函数一个常见的模式是配置加载你可能有一个默认配置字典然后根据环境或参数动态更新它。在动态更新的逻辑里可能不小心用类对象覆盖了字符串。default_config {“model”: “LinearRegression“} user_override {“model”: LinearRegression} # 这里应该是字符串 “LinearRegression“但写成了类 final_config {**default_config, **user_override} # 污染发生3.3 第三步实施修复策略定位并理解来源后修复就水到渠成了。策略取决于你的业务逻辑修正数据源推荐如果这是一个错误直接修改产生该数据的代码确保它存储的是可序列化的值例如存储类的字符串名称‘MyModel‘而非类本身MyModel。数据清洗预处理如果无法修改数据源例如数据来自第三方库则在序列化前对数据进行一次清洗转换。def sanitize_for_json(obj): “”“递归地将常见非JSON类型转换为可序列化类型。”“” if isinstance(obj, dict): return {k: sanitize_for_json(v) for k, v in obj.items()} elif isinstance(obj, (list, tuple, set)): return [sanitize_for_json(item) for item in obj] # 处理特定类型如果是类或函数取其 __name__ elif isinstance(obj, type): # 检查是否是类 return obj.__name__ # 返回类名字符串 elif callable(obj) and hasattr(obj, ‘__name__‘): # 检查是否是函数或可调用对象 return obj.__name__ # 可以在这里扩展处理其他类型如 datetime, Decimal, numpy 类型等 # elif isinstance(obj, datetime.datetime): # return obj.isoformat() else: # 默认返回原对象如果是基础类型则没问题如果不是会在后续json.dumps中报错 return obj clean_data sanitize_for_json(your_data) json_string json.dumps(clean_data)注意事项这个sanitize_for_json函数是一个起点。你需要根据项目中实际遇到的非标准类型进行扩展。例如处理datetime对象时转换为 ISO 格式字符串处理 NumPy 标量时用item()方法转为 Python 内置类型。4. 进阶构建健壮的数据序列化管道对于需要频繁处理 JSON 序列化的项目如 Web API、数据管道、配置文件管理被动排查不如主动防御。建立一个健壮的序列化管道可以一劳永逸。4.1 创建自定义的 JSON 编码器谨慎使用虽然开头说这不是针对“对象转 JSON”的方法但在明确了问题根源是type等特定类型后一个扩展的编码器可以作为最后的保障层。它的目的不是处理所有自定义对象而是有选择地、安全地处理几种已知的“麻烦”类型。import json from datetime import datetime, date from decimal import Decimal import numpy as np class RobustJSONEncoder(json.JSONEncoder): “”“增强的JSON编码器处理常见非标准类型。”“” def default(self, obj): # 1. 处理类型和函数转换为其名称 if isinstance(obj, type): return f“class ‘{obj.__module__}.{obj.__name__}‘“ # 或直接 obj.__name__ if callable(obj) and hasattr(obj, ‘__name__‘): return f“function {obj.__name__}“ # 2. 处理日期时间 if isinstance(obj, (datetime, date)): return obj.isoformat() # 3. 处理高精度数字 if isinstance(obj, Decimal): return float(obj) # 或 str(obj) 以保持精确 # 4. 处理常见的numpy类型 if hasattr(obj, ‘item‘): # 适用于np.int64, np.float32等标量 return obj.item() if hasattr(obj, ‘tolist‘): # 适用于np.ndarray return obj.tolist() # 5. 对于其他无法处理的类型提供一个清晰的错误信息而不是让上层报晦涩的错 return super().default(obj) # 这将最终引发 TypeError但你可以自定义行为 # 或者更激进一点记录日志并返回一个占位符 # import logging # logging.warning(f“Object of type {type(obj)} not serializable, replaced with None. Value: {obj}“) # return None # 使用方式 data {“model_class”: LinearRegression, “timestamp”: datetime.now()} try: json_str json.dumps(data, clsRobustJSONEncoder, indent2) print(json_str) except TypeError as e: print(f“序列化失败: {e}“)关键点这个编码器的default方法是一个“安全网”。它只捕获你明确知道该如何处理的类型。对于未知类型它选择调用父类的default方法最终抛出TypeError或返回None并记录警告。这避免了隐藏真正的数据结构错误。4.2 在数据入口处进行验证最好的防御是在数据进入你的核心系统之前就进行验证。使用 Pydantic 这样的库可以极大地减少这类问题。from pydantic import BaseModel, validator from typing import Any import json class MyDataModel(BaseModel): name: str # 使用严格的类型注解Pydantic会尝试强制转换 value: float callback: Any # 如果这里期望是字符串就不要用Any validator(‘callback‘) def validate_callback(cls, v): # 如果callback必须是字符串确保它是字符串 if not isinstance(v, str): # 如果是函数或类可以在这里转换为字符串名称 if callable(v) and hasattr(v, ‘__name__‘): return v.__name__ else: raise ValueError(‘callback must be a string or a callable with __name__‘) return v # 使用 try: # 即使传入函数对象也会被验证器转换为字符串 data_instance MyDataModel(name“test“, value1.5, callbackmy_callback_function) # 现在序列化是安全的因为callback字段已经是字符串了 json_str data_instance.json() except Exception as e: print(f“数据验证失败: {e}“)Pydantic 会在实例化模型时强制执行类型检查和自定义验证确保数据在进入业务逻辑前就是“干净”的。4.3 单元测试覆盖为你的核心数据结构和序列化函数编写单元测试模拟各种边界情况确保type对象或其他意外类型不会导致程序崩溃。import pytest import json from my_module import my_data_processing_function, RobustJSONEncoder def test_serialization_with_type_object(): “”“测试当数据中包含类对象时的行为。”“” problematic_data {“key”: “value“, “cls”: dict} # dict 是一个类 # 测试1使用默认编码器应抛出 TypeError with pytest.raises(TypeError, match“not JSON serializable“): json.dumps(problematic_data) # 测试2使用我们的健壮编码器应成功 result json.dumps(problematic_data, clsRobustJSONEncoder) parsed_back json.loads(result) assert parsed_back[“cls”] “class ‘builtins.dict‘“ # 或 “dict“ def test_data_processing_function_cleans_data(): input_data {…} # 构造一个包含非序列化内容的输入数据 output_data my_data_processing_function(input_data) # 断言输出数据可以被安全序列化 try: json.dumps(output_data) except TypeError as e: pytest.fail(f“处理后的数据仍包含不可序列化内容: {e}“)5. 常见问题与排查技巧实录在实际开发中除了标准的type对象还会遇到许多“变种”错误。下面是一个速查表列出了相关错误和排查方向错误信息 (片段)可能的原因排查思路TypeError: Object of type ‘type‘ is not JSON serializable数据中包含了 Python 类对象。使用find_non_serializables函数定位路径检查配置、回调函数、动态加载的模块属性。TypeError: Object of type ‘function‘ is not JSON serializable数据中包含了函数对象。同上重点检查名为callback,handler,func的字典键。TypeError: Object of type ‘module‘ is not JSON serializable数据中直接引用了一个模块。检查是否错误地赋值了import的模块如config[‘lib‘] numpy。TypeError: Object of type ‘ndarray‘ is not JSON serializable数据中包含 NumPy 数组。使用.tolist()方法转换数组或使用RobustJSONEncoder。TypeError: Object of type ‘int64‘ is not JSON serializable数据中包含 NumPy 整数类型。使用.item()方法转换标量或确保使用 Python 内置int/float。TypeError: Object of type ‘datetime‘ is not JSON serializable数据中包含datetime对象。转换为 ISO 格式字符串 (obj.isoformat())。TypeError: Object of type ‘Decimal‘ is not JSON serializable数据中包含高精度Decimal对象。转换为float(可能损失精度) 或str。独家避坑技巧“冻结”数据快照在复杂数据处理流程的关键节点将数据用pickle或json.dumps配合自定义编码器保存到文件。当线上报错时可以还原出问题的数据现场精准复现和调试。使用orjson或ujson这些第三方 JSON 库性能远超标准库并且对某些非标准类型如datetime,UUID有内置支持。但请注意它们同样不支持type对象且错误信息可能不同。它们可以作为性能优化和扩展类型支持的选择但非根本解决方案。日志记录数据指纹在序列化前记录关键数据的“指纹”如主要键的类型、长度。当错误发生时通过对比指纹可以快速判断是哪个环节的数据发生了异常变化。防御性编程对于任何从外部用户输入、网络 API、数据库获取并最终需要序列化的数据都假设它可能是“脏”的。在核心业务逻辑之前设计一个数据清洗和验证层就像给数据“洗澡”一样把type、function这些“异物”过滤掉。最后记住这个问题的核心逻辑json.dumps报错type不可序列化是一个数据问题而不是一个序列化方法问题。你的主要精力应该放在确保输入json.dumps的数据结构是纯净的而不是去修改json.dumps的行为去适应“脏数据”。从源头治理才能写出更健壮、更易维护的代码。

相关新闻

混动专用润滑油测试与性能分析

混动专用润滑油测试与性能分析

1. 项目背景与测试意义作为一名在汽车后市场摸爬滚打十二年的"油液老炮",我始终认为润滑油测试不能停留在纸面参数上。这次针对出光APOLLOIL 0W-20混动专用油的实测,源于近期维修车间遇到的三个典型案例:一台混动SUV在连续爬坡后出…

2026/8/1 5:48:56 阅读更多 →
SpringBoot构建琼瑶作品品鉴平台的技术实践

SpringBoot构建琼瑶作品品鉴平台的技术实践

1. 项目背景与核心价值琼瑶作品作为华语文学的重要分支,其独特的叙事风格和情感表达方式吸引了大量读者。随着数字化阅读的普及,传统的纸质书评交流方式已经难以满足现代读者的互动需求。这个基于SpringBoot的琼瑶品鉴平台正是为解决这一痛点而生。我在开…

2026/8/1 5:47:56 阅读更多 →
G-Helper终极指南:华硕笔记本轻量控制的完整解决方案

G-Helper终极指南:华硕笔记本轻量控制的完整解决方案

G-Helper终极指南:华硕笔记本轻量控制的完整解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Exp…

2026/8/1 5:47:56 阅读更多 →

最新新闻

Python字符串转浮点数错误解析与数据清洗实战指南

Python字符串转浮点数错误解析与数据清洗实战指南

1. 问题本质与场景剖析“ValueError: could not convert string to float”这个错误,但凡写过几天Python的朋友,大概率都见过。它就像一个不请自来的老朋友,在你处理数据、读取文件或者解析用户输入时,冷不丁地跳出来给你一个“惊…

2026/8/1 6:37:12 阅读更多 →
Voronoi图:空间划分的数学之美与多领域应用实践

Voronoi图:空间划分的数学之美与多领域应用实践

1. 从“谁的地盘谁做主”说起:Voronoi图的直观理解想象一下,你站在一片空旷的田野上,周围散落着几个村庄。现在,你需要决定:对于田野里的任意一个点,比如一棵树或者一口井,它应该归属于哪个村庄…

2026/8/1 6:37:12 阅读更多 →
易语言托盘图标开发实战:从基础组件到后台工具完整实现

易语言托盘图标开发实战:从基础组件到后台工具完整实现

1. 从“最小化到托盘”说起:为什么我们需要托盘图标?如果你用过QQ、微信、网易云音乐这类桌面软件,一定对它们的一个行为不陌生:当你点击窗口右上角的“X”关闭按钮时,窗口看似消失了,但任务栏上它的图标也…

2026/8/1 6:37:12 阅读更多 →
重新掌控你的macOS:noTunes如何优雅地阻止音乐应用自动启动

重新掌控你的macOS:noTunes如何优雅地阻止音乐应用自动启动

重新掌控你的macOS:noTunes如何优雅地阻止音乐应用自动启动 【免费下载链接】noTunes A simple macOS application that will prevent iTunes or Apple Music from launching. 项目地址: https://gitcode.com/gh_mirrors/no/noTunes 您是否曾在专注工作时被突…

2026/8/1 6:37:12 阅读更多 →
基于CH32H417WEU6的USB3.0逻辑分析仪实战指南

基于CH32H417WEU6的USB3.0逻辑分析仪实战指南

这类开源硬件项目最值得先看的不是功能列表,而是能不能在普通开发环境里稳定跑起来。逻辑分析仪的核心价值在于能抓取数字信号,帮助排查通信协议、时序问题和硬件交互异常。CH32H417WEU6 这款 MCU 自带 USB3.0 接口,理论上能支持更高采样率&a…

2026/8/1 6:37:12 阅读更多 →
Python图像处理工具链:从下载到合成的完整实现

Python图像处理工具链:从下载到合成的完整实现

在实际项目开发中,我们经常需要处理图片的批量下载、格式转换和合成任务。这类需求在内容管理、素材处理和自动化运营场景中非常常见。本文将以一个具体的图片处理任务为例,带你从零搭建一个完整的图片处理工具链。这个工具链将涵盖网络图片下载、格式转…

2026/8/1 6:36:12 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/8/1 5:19:34 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →