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

使用Josson库时无法计算含字符串类型的JSON表达式

Josson库calc函数字符串比较触发语法异常问题

我们使用Josson库处理JSON数据时遇到如下问题:

JSON示例

{
  "pressureStage":1,
  "data":{
    "flange":{
      "specification":"PN 16"
    }
  }
}

问题代码

String a = "{\"pressureStage\":1,\"data\":{\"flange\":{\"specification\":\"PN16\"}}}";
Josson josson = Josson.fromJsonString(a);
String expression3 = "calc(if(sp==\"PN16\",350*2,400*2),sp:$.data.flange.specification)";
System.out.println(josson.getNode(expression3));

运行异常

Exception in thread "main" java.lang.IllegalArgumentException: Invalid function call calc() : Calc syntax error.
    at com.octomix.josson.FuncDispatcher.apply(FuncDispatcher.java:84)
    at com.octomix.josson.JossonCore.getPathBySteps(JossonCore.java:328)
    at com.octomix.josson.JossonCore.getPathBySteps(JossonCore.java:249)
    at com.octomix.josson.JossonCore.getPathByExpression(JossonCore.java:211)
    at com.octomix.josson.JossonCore.getNodeByExpression(JossonCore.java:147)
    at com.octomix.josson.JossonCore.getNodeByExpression(JossonCore.java:142)
    at com.octomix.josson.Josson.getNode(Josson.java:279)
    at com.octomix.josson.Josson.getString(Josson.java:535)
    at com.velotech.pumpselection.velotech.expressionCheck.main(expressionCheck.java:25)

问题说明:当specification字段为数值类型时代码可正常运行,但字段为字符串类型时会触发上述语法异常。

解决方案

修改calc表达式中的字符串常量引号,将双引号改为单引号:

String expression3 = "calc(if(sp=='PN16',350*2,400*2),sp:$.data.flange.specification)";

原因:Josson的calc函数语法规则中,字符串常量需要使用单引号包裹。原代码中使用双引号会导致解析器识别错误,触发语法异常;而数值类型无需引号,因此数值场景下可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:05:32