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

基于JSONata从现有对象生成新对象时JavaScript运行报错如何解决

错误原因

  • ReferenceError: compCode is not defined:你直接在JS对象字面量中写compCode、buCode作为值,JS会在当前代码作用域查找对应变量,这些变量未定义就会触发报错。
  • TypeError: path.charAt is not a function:jsonata()构造函数仅支持传入字符串格式的JSONata表达式作为入参,你直接传入JS对象作为参数,JSONata内部会尝试调用入参的charAt方法处理路径,JS对象不存在该方法因此报错。

修复方案

将你需要的对象结构写为JSONata表达式字符串,注意recvLines是数组,你需要明确取第一个元素的属性,或者保留数组格式输出:

const data = {
    "compCode": "0006",
    "compState": "MH",
    "recvDocNo": "0075",
    "buCode": "AC",
    "branchCode": "001",
    "recvLines": [
        {
            "lineNo": 1,
            "itemId": "00002",
            "qtyAccept": 10,
            "unitRate": 100,
            "basicVal": 1000,
            "taxableAmt": 1000,
        }
    ]
};

// 表达式为字符串格式
const expr = `{
    "compCode": compCode,
    "buCode": buCode,
    "lineNo": recvLines[0].lineNo,
    "itemId": recvLines[0].itemId
}`;

const result = jsonata(expr).evaluate(data);
// 输出结果为 { compCode: '0006', buCode: 'AC', lineNo: 1, itemId: '00002' }

如果需要将recvLines所有元素的对应属性输出为数组,将表达式中recvLines[0]改为recvLines即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:09:02