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

