火山引擎DataLeap支持嵌套JSON解析:需先开启数据源“自动解析JSON字段”开关,再通过展开JSON图标逐层下钻或手写JSONPath提取字段,数组字段需启用“展开为多行”并手动保留原始JSON用于高级分析。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在火山引擎数据平台中处理电商订单或用户行为日志时,常遇到原始数据是嵌套JSON格式的情况,比如{"user":{"id":123,"profile":{"name":"张三","tags":["vip","new"]}},"items":[{"sku":"A001","qty":2}]},直接拖字段进分析界面会显示为整段字符串,无法按user.profile.name或items.sku单独筛选或聚合。
确认数据源已支持JSON解析能力
进入DataLeap控制台→选择对应项目→在「数据集成」模块下找到目标数据源(如Kafka、OSS或MySQL Binlog同步任务)→点击「编辑」→查看「数据源配置」页签中是否启用「自动解析JSON字段」开关。该开关默认关闭,【未开启则后续所有嵌套提取操作均无效】。
若为OSS数据源,需确保文件格式为JSONL(每行一个合法JSON对象),且在「字段类型推断」中勾选「启用JSON结构识别」;若为Kafka源,Topic中消息value必须为标准UTF-8编码的JSON字符串,不能含BOM头或换行符包裹。
在映射配置中展开JSON层级
完成数据源配置并保存后,进入该任务的「映射配置」界面→在右侧字段列表中找到类型为string但实际存有JSON内容的字段(如raw_log)→将鼠标悬停其上,点击出现的「展开JSON」图标(?)。
系统自动解析出第一层键名(如user、items、timestamp),此时可对user再次点击「展开JSON」,逐层下钻至user.profile.name;对items展开后,会识别为数组类型,并自动生成items[0].sku、items[0].qty等示例路径。
注意:数组字段展开后仅展示首个元素的结构,真实运行时会自动遍历全部子项。若需聚合全部items中的sku,后续需在SQL或表达式中使用explode函数,此处仅做结构预览。
手动添加嵌套字段并指定数据类型
方法一:从展开树中拖拽字段到目标表字段区
在JSON展开面板中,直接将user.profile.name拖入右侧「目标字段」区域,系统自动创建新字段,命名为name,类型默认为string。点击该字段右侧「编辑」可修改名称(如改为user_name)和类型(如user.id应改为bigint)。
方法二:手写JSONPath表达式
点击「新增字段」→在「来源字段」下拉中仍选原始JSON字段(如raw_log)→在「表达式」栏输入:$.user.profile.tags[0]→设置目标类型为string→命名字段为first_tag。此方式适用于提取数组首项、带条件过滤的路径(如$.items[?(@.qty>1)].sku),但需确保JSONPath语法完全合法,否则任务运行时报错。
【JSONPath中禁止使用单引号,必须用双引号包裹字符串值,例如$.user.profile["name"]正确,$.user.profile['name']将导致解析失败】
处理数组型嵌套字段的聚合场景
第一步:启用数组展开模式
在映射配置界面,找到已展开的数组字段(如items)→点击其右侧「设置」图标→勾选「展开为多行」。此时该字段不再作为单个目标列,而是触发行拆分逻辑。
第二步:配置展开后字段映射
勾选后,界面自动新增一组以items_为前缀的字段(如items_sku、items_qty),这些即为从items数组每个元素中提取的扁平化字段。你可像普通字段一样为其重命名、改类型、设为主键或参与关联。
第三步:保留原始数组用于高级分析
若还需保留完整items数组做JSON字符串计算(如统计总件数json_array_length(items)),需额外添加一个字段,表达式填raw_log本身,并将目标类型设为string,命名为full_items_json。这一步不能省略,因为启用「展开为多行」后,原始字段值在目标表中不再自动保留。


















