Проанализируйте данные в формате JSON и запишите их в файл с помощью groovy

#jenkins #groovy #jenkins-pipeline #jenkins-groovy

#дженкинс #заводной #дженкинс-конвейер #дженкинс-groovy #groovy

Вопрос:

Здесь мы заменяем значение «dpidsha1» из 1234 на другое значение «abcd» в json conent, и мы пытаемся записать содержимое в формате json в файл «uselessfile.json» и распечатать содержимое файла «uselessfile.json»

 import groovy.json.JsonBuilder
import groovy.json.JsonSlurper

def buildContent(){


def content = """
{
   "app":{ },
   "at":2,
   "badv":[ ],
   "bcat":[ ],
   "device":[ {
      "carrier":"310-410",
      "connectiontype":3,
      "devicetype":1,
      "dnt":0,
      "dpidmd5":"268d403db34e32c45869bb1401247af9",
      "dpidsha1":"1234" 
   },
   {
      "carrier":"310-410",
      "connectiontype":3,
      "devicetype":1,
      "dnt":0,
      "dpidmd5":"268d403db34e32c45869bb1401247af9",
      "dpidsha1":"1234" 
   }]
}"""

def slurped = new JsonSlurper().parseText(content)
def builder = new JsonBuilder(slurped)
builder.content.device.dpidsha1 = 'abcd'  
println(builder.toPrettyString())

writeFile file: 'uselessfile.json', text: builder.toPrettyString(content)

  File file = new File("uselessfile.json")

  println "Below is the content of the file ${file.absolutePath}"
  println uselessfile.json
  

ОШИБКА:

[Конвейер] Конец конвейера исключение, которое произошло: в поле com.cloudbees.groovy.cps.impl.BlockScopeEnv.locals

Вызвано: исключение java.io.NotSerializableException: groovy.json.JsonBuilder

Комментарии:

1. jsonBuilder.toPrettyString(content) должно быть builder.toPrettyString(content)

2. При записи данных в uselessfile по-прежнему происходит сбой. файл в формате json. Я обновил вопрос.

Ответ №1:

Вы можете использовать конвейерную утилиту steps readJSON и writeJSON заархивировать свою цель следующим образом:

 def buildContent(){

   def content = """
      {
         "app":{ },
         "at":2,
         "badv":[ ],
         "bcat":[ ],
         "device":{
            "carrier":"310-410",
            "connectiontype":3,
            "devicetype":1,
            "dnt":0,
            "dpidmd5":"268d403db34e32c45869bb1401247af9",
            "dpidsha1":"1234" 
         }
      }
   """

   def jsonObj = readJSON text: content.trim()
   jsonObj.device.dpidsha1 = 'abcd'

   writeJSON file: 'uselessfile.json', json: jsonObj, pretty: 4

   sh 'cat uselessfile.json'
}
  

Причина java.io.NotSerializableException: groovy.json.JsonBuilder в том, что конвейер Дженкинс сохранит конвейер после сериализации. Но класс groovy.json.JsonBuilder не реализован Serializable , поэтому его нельзя сериализовать

Комментарии:

1. По-прежнему выдается ОШИБКА: такое поле не найдено: версия net.sf.json.JSONArray. Я обновил вопрос.