You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在IIB/ACE中使用ESQL构建指定JSON结构的技术求助

ESQL构建目标JSON结构的解决方案

核心思路

  1. 直接操作OutputRoot.JSON避免多余的根对象Data
  2. 先初始化主JSON对象和characteristics数组,遍历数据库记录时追加数组元素而非覆盖整个对象
  3. 从第一条数据库记录提取公共字段(programId、sku等),保证这些值全局一致

完整ESQL代码示例

DECLARE resultSet REFERENCE TO Database.ResultSet; -- 假设你的数据库查询结果集存在这里
DECLARE firstRow BOOLEAN TRUE;
DECLARE charArray REFERENCE;

-- 初始化主JSON结构
SET OutputRoot.JSON = {
    "programId": 0,
    "sku": "",
    "productTypeId": 0,
    "brand": "",
    "year_no": 0,
    "characteristics": []
};

-- 定位到characteristics数组
SET charArray = OutputRoot.JSON.characteristics;

-- 遍历数据库结果集
WHILE LASTMOVE(resultSet) DO
    -- 第一条记录时设置公共字段(因为这些值所有记录一致)
    IF firstRow THEN
        SET OutputRoot.JSON.programId = resultSet.programId;
        SET OutputRoot.JSON.sku = resultSet.sku;
        SET OutputRoot.JSON.productTypeId = resultSet.productTypeId;
        SET OutputRoot.JSON.brand = resultSet.brand;
        SET OutputRoot.JSON.year_no = resultSet.year_no;
        SET firstRow = FALSE;
    END IF;

    -- 构建单个characteristic对象并追加到数组
    DECLARE charObj ROW;
    SET charObj.characteristicId = resultSet.characteristicId;
    SET charObj.value_no = resultSet.value_no;
    SET charArray[LAST+1] = charObj;

    -- 移动到下一条记录
    MOVE resultSet NEXTSIBLING;
END WHILE;

关键点解释

  • 解决根对象问题:直接使用OutputRoot.JSON作为根节点,而非OutputRoot.JSON.Data,生成的JSON就不会包含多余的Data外层对象
  • 避免覆盖问题:先初始化characteristics为空数组,每次遍历记录时用charArray[LAST+1]将新对象追加到数组末尾,而非重新赋值整个数组或主对象
  • 保证公共字段一致:通过firstRow标记只从第一条记录读取programId、sku等公共字段,后续记录不再修改这些值,确保全局一致

内容的提问来源于stack exchange,提问作者hodddibaba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 11:17:15