基于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
相关产品推荐
相关产品推荐

