使用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
相关产品推荐
相关产品推荐

