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

Groovy中如何使用jsonSlurper.parseText解析含短横线的文本

解析失败根因

JsonSlurper.parseText()默认使用标准JSON解析模式,会将未被双引号包裹、包含短横线的内容识别为算术表达式(短横线被判定为减号运算符),尝试做数值计算,最终要么得到不符合预期的计算结果,要么直接抛出解析异常,这也是"807-000"这类带短横线的字符串解析出错的核心原因。

正确解析方案

根据待解析内容的格式,二选一即可:

  • 方案1:使用标准JSON格式传入(推荐,兼容性最好)
    所有字符串类型的值(包括含短横线的"807-000")必须用双引号包裹,禁止省略引号、用单引号替代双引号。

    import groovy.json.JsonSlurper
    
    // 待解析内容:带短横线的字符串值用双引号包裹,符合标准JSON规范
    def validJsonStr = '{"productCode":"807-000","productName":"test"}'
    def jsonSlurper = new JsonSlurper()
    def parseResult = jsonSlurper.parseText(validJsonStr)
    
    // 验证解析结果
    assert parseResult.productCode == "807-000"
    

    注意:如果省略值的双引号,解析器会把807-000当成807 - 000计算,最终得到数值807,完全不符合预期:

    // 错误示例,禁止使用
    def invalidJsonStr = '{"productCode":807-000}'
    
  • 方案2:使用宽松解析模式适配非标准类JSON内容
    如果拿到的待解析内容是松散结构(比如键名没加引号、字符串没加引号),可以将解析器切换为LAX模式,该模式会自动识别未加引号的文本值,不会将短横线误判为减号:

    import groovy.json.JsonSlurper
    import groovy.json.JsonParserType
    
    // 松散结构示例:键名、字符串值都未加标准双引号
    def looseJsonStr = '{productCode:807-000, productName:test}'
    // 初始化解析器时指定LAX宽松模式
    def jsonSlurper = new JsonSlurper().setType(JsonParserType.LAX)
    def parseResult = jsonSlurper.parseText(looseJsonStr)
    
    // 验证解析结果
    assert parseResult.productCode == "807-000"
    

问题示例截图

内容的提问来源于stack exchange,提问作者m.mahdi_rasouli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 20:36:21