【问题标题】:Not that kind of Map exception with Jenkins and Groovy不是 Jenkins 和 Groovy 的那种 Map 异常
【发布时间】:2020-01-14 19:28:44
【问题描述】:

我在 groovy 中有一个字符串,我想将其转换为地图。当我通过一个 groovy 脚本在本地计算机上运行代码进行测试时,我没有任何问题,并且返回了一个惰性映射。然后我可以将其转换为常规地图,然后生活继续。当我通过我的 Jenkins DSL 管道尝试相同的代码时,我遇到了异常

groovy.json.internal.Exceptions$JsonInternalException: Not that kind of map

这里是有问题的代码块:

  import groovy.json.*

  String string1 = "{value1={blue green=true, red pink=true, gold silver=true}, value2={red gold=false}, value3={silver brown=false}}"

  def stringToMapConverter(String stringToBeConverted){
      formattedString = stringToBeConverted.replace("=", ":")
      def jsonSlurper = new JsonSlurper().setType(JsonParserType.LAX)
      def mapOfString = jsonSlurper.parseText(formattedString)
      return mapOfString
  }

  def returnedValue = stringToMapConverter(string1)

  println(returnedValue)

返回值:

[value2:[red gold:false], value1:[red pink:true, gold silver:true, blue green:true], value3:[silver brown:false]]

我知道 Jenkins 和 Groovy 在很多方面存在差异,但是从在线搜索中其他人建议我应该能够在我的 groovy 管道中使用 LAX JsonSlurper 库。我试图避免将我自己的字符串手动滚动到映射转换器,并且如果它在那里,我更愿意使用一个库。这里有什么不同会导致这种行为?

【问题讨论】:

    标签: jenkins groovy scripting


    【解决方案1】:

    尝试使用

    import groovy.json.*
    
    //@NonCPS
    def parseJson(jsonString) {
        // Would like to use readJSON step, but it requires a context, even for parsing just text.
        def lazyMap = new JsonSlurper().setType(JsonParserType.LAX).parseText(jsonString.replace("=", ":").normalize())
    
        // JsonSlurper returns a non-serializable LazyMap, so copy it into a regular map before returning
        def m = [:]
        m.putAll(lazyMap)
        return m
    }
    
    String string1 = "{value1={blue green=true, red pink=true, gold silver=true}, value2={red gold=false}, value3={silver brown=false}}"
    def returnedValue = parseJson(string1)
    println(returnedValue)
    println(JsonOutput.toJson(returnedValue))
    

    您可以找到有关normalize here 的信息。

    【讨论】:

    • 嗯...似乎没有工作。仍然得到同样的错误。我应该注意该函数位于共享库中,并且原始字符串是一个环境变量,尽管它仍然属于 java.lang.String
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多