Хобрук: Ваш путь к мастерству в программировании

Не такое исключение Map с Jenkins и Groovy

У меня есть строка в 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 различаются по-разному, но из поиска в Интернете другие предполагают, что я должен иметь возможность использовать библиотеку LAX JsonSlurper в моем конвейере groovy. Я пытаюсь избежать ручной конвертации моей собственной строки в конвертер карт и предпочел бы использовать библиотеку, если она есть. Какая может быть разница, которая может вызвать такое поведение?

14.01.2020

Ответы:


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 здесь.

14.01.2020
  • хм... не работает. Все еще получаю ту же ошибку. Я должен отметить, что функция находится в общей библиотеке, а исходная строка является переменной среды, хотя она по-прежнему относится к классу java.lang.String. 15.01.2020
  • Новые материалы

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

    Ториго  — революция в игре Го
    Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

    Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
    Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

    Математика и интуиция - Часть 1
    У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..

    Раскрытие возможностей НЛП: часть речевой маркировки и ее проблемы
    В сфере обработки естественного языка (NLP) маркировка частей речи (POS) выступает в качестве фундаментального метода, позволяющего компьютерам понимать и анализировать человеческий язык на..

    Под поверхностью: раскрытие деталей системы с помощью инструментов Linux CLI
    Чем больше вы изучаете Linux и продвигаетесь вперед, тем больше вам нужно проверять информацию о вашей системе. Эта информация может касаться аппаратного обеспечения, такого как процессор,..

    Как реализовать линейную регрессию в JavaScript
    Узнайте, как реализовать линейную регрессию в JavaScript с помощью ML.js Линейная регрессия — это метод машинного обучения, используемый для моделирования связи между зависимой переменной и..