首页
/ ThingsBoard规则引擎中实现JSON动态嵌套赋值的TBEL实践

ThingsBoard规则引擎中实现JSON动态嵌套赋值的TBEL实践

2025-05-12 22:11:43作者:凌朦慧Richard

背景与需求场景

在ThingsBoard规则引擎的脚本节点开发中,开发者经常需要处理动态构建嵌套JSON结构的场景。典型需求是:给定一个路径列表(如["A", "B", "C", "D"])和一个目标值(如"x"),需要将值插入到可能不存在的多级嵌套结构中。

技术挑战分析

传统直接使用put方法会遇到以下问题:

  1. 路径不确定性:中间节点可能不存在,需要动态创建
  2. 结构完整性:不能破坏原有JSON中已存在的其他字段
  3. 代码冗余:多层嵌套需要大量判空代码
  4. 引用处理:JavaScript/TBEL中的对象引用机制与Java不同

解决方案实现

通过创建nodeSetter工具函数实现优雅处理:

function nodeSetter(json, list, value) {
    var currentNode = json;
    // 遍历除最后一级的所有路径
    for (var i = 0; i < list.length - 1; i++) {
        var key = list[i];
        
        // 动态创建不存在的节点
        if (currentNode.get(key) == null) {
            currentNode.put(key, {});
        }
        
        // 进入下一层级
        currentNode = currentNode.get(key);
    }

    // 设置最终节点的值
    currentNode.put(list[list.length - 1], value);
    return json;
}

关键实现要点

  1. 引用传递处理:通过currentNode变量持有当前层级的引用
  2. 渐进式构建:按需创建缺失的中间节点
  3. 安全访问:使用get()方法避免直接属性访问的异常
  4. 层级隔离:保留同级已存在的其他字段

使用示例

// 初始化空对象
var target = {};

// 构建四级嵌套结构
nodeSetter(target, ["A", "B", "C", "D"], "x");

// 结果:{A: {B: {C: {D: "x"}}}}

进阶应用场景

  1. 动态配置存储:根据设备类型动态构建配置结构
  2. 遥测数据处理:将扁平数据转换为层次化存储
  3. 规则链上下文:在多个节点间传递结构化数据
  4. 与元数据结合:实现基于路径的动态属性管理

注意事项

  1. TBEL中对象操作与原生JavaScript的差异
  2. 路径列表中不能包含null或undefined值
  3. 性能考虑:深度嵌套结构建议限制层级
  4. 线程安全:在规则引擎中的并发访问控制
登录后查看全文
热门项目推荐

项目优选

收起
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
136
186
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
882
523
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
362
381
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
182
264
kernelkernel
deepin linux kernel
C
22
5
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
7
0
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.09 K
0
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
83
4
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
613
60
open-eBackupopen-eBackup
open-eBackup是一款开源备份软件,采用集群高扩展架构,通过应用备份通用框架、并行备份等技术,为主流数据库、虚拟化、文件系统、大数据等应用提供E2E的数据备份、恢复等能力,帮助用户实现关键数据高效保护。
HTML
118
78