关键信息
- 分类
- 数据与表格
- 输入类型
- textarea
- 输出类型
- text
- 样本覆盖
- 4
- 支持 API
- Yes
概览
深度默认值工具基于 lodash 的 `_.defaultsDeep` 方法,用于递归地为一个目标对象填充来自一个或多个来源对象的默认值。它会深度遍历嵌套对象,仅当目标对象中的属性为 `undefined` 时,才会用来源对象中的对应值进行填充,确保目标对象的现有值不被覆盖。
适用场景
- •需要合并多层嵌套的配置对象,且希望保留用户自定义配置的优先级时。
- •为 API 响应或数据结构设置完整的默认值,避免访问深层属性时报错时。
- •处理用户输入或表单数据,需要与一套完整的默认设置进行深度合并时。
工作原理
- •输入一个“目标对象”和一个或多个“来源对象”。
- •工具内部调用 lodash 的 `_.defaultsDeep` 函数进行递归合并。
- •合并逻辑为:仅当目标对象中某个路径的值为 `undefined` 时,才会将来源对象中对应路径的值赋给它。
- •输出合并后的完整对象,目标对象的原始值始终优先。
使用场景
前端项目配置管理:合并用户自定义的主题配置与框架的默认主题配置。
后端 API 数据补全:为从数据库查询出的不完整数据对象,补全所有必需的字段默认值。
数据处理流水线:在数据处理步骤间,确保数据结构始终包含所有预期的字段,即使某些步骤未生成它们。
用户案例
1. 合并前端主题配置
前端开发者- 背景原因
- 开发一个可定制主题的组件库,用户可能只修改部分颜色,其他样式需使用默认值。
- 解决问题
- 需要将用户传入的局部配置与完整的默认配置深度合并,生成最终配置。
- 如何使用
- 将默认主题对象作为“目标对象”,将用户自定义配置对象作为“来源1”进行合并。
- 示例配置
-
目标对象:{"theme":{"primary":"#007bff","secondary":"#6c757d","font":{"size":"16px","family":"Arial"}}} 来源1:{"theme":{"primary":"#ff5722","font":{"family":"Helvetica"}}} - 效果
- 得到合并后的配置:{"theme":{"primary":"#ff5722","secondary":"#6c757d","font":{"size":"16px","family":"Helvetica"}}}。用户的自定义值(主色、字体)覆盖了默认值,而未定义的次要颜色和字体大小则保留了默认值。
2. 补全 API 响应数据
- 背景原因
- 从外部 API 获取的用户资料数据可能不完整,某些可选字段可能缺失,但前端组件需要完整的数据结构来渲染。
- 解决问题
- 需要为 API 返回的 JSON 数据补全所有缺失字段的默认值,防止渲染错误。
- 如何使用
- 将 API 返回的数据对象作为“目标对象”,将一个包含所有字段及默认值的模板对象作为“来源1”。
- 示例配置
-
目标对象:{"id":123,"name":"张三","profile":{"avatar":"url.jpg"}} 来源1:{"id":0,"name":"未知","profile":{"avatar":"default.jpg","bio":"","location":""},"settings":{"notifications":true}} - 效果
- 得到完整的数据对象:{"id":123,"name":"张三","profile":{"avatar":"url.jpg","bio":"","location":""},"settings":{"notifications":true}}。API 返回的 `id`、`name`、`avatar` 被保留,缺失的 `bio`、`location` 和整个 `settings` 对象被补全。
3. 多环境配置管理
- 背景原因
- 应用程序有基础配置,以及针对开发、测试、生产等不同环境的特定配置。需要生成最终配置。
- 解决问题
- 需要将基础配置与特定环境的配置深度合并,环境配置优先,缺失项则使用基础配置。
- 如何使用
- 将基础配置作为“目标对象”,将特定环境(如生产环境)的配置作为“来源1”。
- 示例配置
-
目标对象:{"api":{"baseUrl":"http://localhost:3000","timeout":5000},"debug":true,"logLevel":"verbose"} 来源1:{"api":{"baseUrl":"https://api.prod.example.com"},"debug":false} - 效果
- 得到生产环境的最终配置:{"api":{"baseUrl":"https://api.prod.example.com","timeout":5000},"debug":false,"logLevel":"verbose"}。环境配置覆盖了 `api.baseUrl` 和 `debug`,而 `api.timeout` 和 `logLevel` 则继承自基础配置。
用 Samples 测试
jsonELK Stack 日志分析示例
全面的 ELK Stack(Elasticsearch、Logstash、Kibana)示例,用于分布式系统中的日志聚合、处理和可视化
preferred input family json
Apache Arrow 示例
Apache Arrow 内存列式格式示例,用于高性能数据处理和分析
preferred input family json
分布式追踪示例
使用 Jaeger、OpenTelemetry 和其他现代可观测性工具的综合分布式追踪示例,适用于微服务架构
preferred input family json
AWS EventBridge 示例
AWS EventBridge 示例,包括事件总线、规则、目标、模式注册表、自定义事件和跨账户事件路由,适用于无服务器事件驱动架构
preferred input family json
相关专题
JSON 交换与格式翻译工具
在一个专题里比较 JSON 与 CSV、YAML、TOML、GraphQL、XML、Markdown、Excel、BSON、EDN 等结构化格式之间的转换工具。
JSON 检查、对比与转换工具
把 JSON 格式化、差异对比、路径检查、Schema 校验、合并、转换和导出工具集中到一个专题中,适合 API 与数据处理流程。
JSON Schema、Mock 数据与 API 夹具生成工具
围绕JSON Schema 生成、Mock 负载构建与 API 夹具准备整理的一组工具。
JSON 格式化、对比与规范化工具
在一个专题中比较 JSON 格式化、差异对比、日志审查、配置比较和数据规范化工具,适合需要让 JSON 更易读、更易审查的流程。
常见问题
这个工具是做什么的?
它递归地将多个来源对象的默认值填充到目标对象中,只填充目标对象里值为 `undefined` 的属性。
它和普通的对象合并(浅合并)有什么区别?
普通合并会覆盖同名属性。此工具是“深度默认”,只填充 `undefined` 的属性,能处理嵌套对象,且目标对象的值永远优先。
它会如何处理数组?
根据 lodash `_.defaultsDeep` 的行为,数组会被视为普通值进行合并,不会递归合并数组内的元素。
这个工具会修改我输入的原始对象吗?
不会。工具返回的是一个合并后的新对象,您的原始输入对象保持不变。
最多可以添加几个来源对象?
工具界面支持最多三个来源对象(来源1、来源2、来源3),其中来源2和来源3是可选的。