Tengo que crear este archivo JSON en Groovy.
Intenté muchas cosas (JsonOutput.toJson() /JsonSlurper.parseText()) sin éxito.

{
   "attachments":[
      {
         "fallback":"New open task [Urgent]: <http://url_to_task|Test out Slack message attachments>",
         "pretext":"New open task [Urgent]: <http://url_to_task|Test out Slack message attachments>",
         "color":"#D00000",
         "fields":[
            {
               "title":"Notes",
               "value":"This is much easier than I thought it would be.",
               "short":false
            }
         ]
      }
   ]
}

Esto es para la publicación de una Jenkins construir mensaje a la Flojera.

en el título de la pregunta que pregunta acerca de análisis, y en cuestión a sí mismo preguntando acerca de la creación de archivo json. podría usted por favor aclarar lo que quiere/intenta hacer.
me gustaría crear los objetos JSON en un groovy variable.

OriginalEl autor Mr_DeLeTeD | 2017-06-22

3 Comentarios

  1. 25

    JSON es un formato que usa el texto legible para transmitir los datos de los objetos compuestos de pares atributo–valor y la matriz de tipos de datos.
    Así que, en general json es un formato de texto.

    En groovy objeto json es sólo una secuencia de mapas y matrices.

    el análisis de json utilizando JsonSlurperClassic

    //use JsonSlurperClassic because it produces HashMap that could be serialized by pipeline
    import groovy.json.JsonSlurperClassic
    
    node{
        def json = readFile(file:'message2.json')
        def data = new JsonSlurperClassic().parseText(json)
        echo "color: ${data.attachments[0].color}"
    }

    el análisis de json utilizando tubería

    node{
        def data = readJSON file:'message2.json'
        echo "color: ${data.attachments[0].color}"
    }

    la construcción de json a partir de código y escribir en archivo

    import groovy.json.JsonOutput
    node{
        //to create json declare a sequence of maps/arrays in groovy
        //here is the data according to your sample
        def data = [
            attachments:[
                [
                    fallback: "New open task [Urgent]: <http://url_to_task|Test out Slack message attachments>",
                    pretext : "New open task [Urgent]: <http://url_to_task|Test out Slack message attachments>",
                    color   : "#D00000",
                    fields  :[
                        [
                            title: "Notes",
                            value: "This is much easier than I thought it would be.",
                            short: false
                        ]
                    ]
                ]
            ]
        ]
        //two alternatives to write
    
        //native pipeline step:
        writeJSON(file: 'message1.json', json: data)
    
        //but if writeJSON not supported by your version:
        //convert maps/arrays to json formatted string
        def json = JsonOutput.toJson(data)
        //if you need pretty print (multiline) json
        json = JsonOutput.prettyPrint(json)
    
        //put string into the file:
        writeFile(file:'message2.json', text: json)
    
    }
    Estoy tratando de hacer esto. Me sale «ERROR: org.jenkinsci.los plugins.scriptsecurity.sandbox.RejectedAccessException: secuencias de comandos no se permite el uso de las nuevas groovy.json.JsonSlurperClassic» ¿Qué me estoy perdiendo?
    stackoverflow.com/questions/38276341/…
    Esto no me funciona en la última versión de jenkins (2.138.3). Me sale un problema en el writeJSON paso: WriteJSONStep(file: String, json: JSON{}, pretty?: int): java.lang.UnsupportedOperationException: must specify $class with an implementation of interface net.sf.json.JSONMás contexto aquí: stackoverflow.com/questions/53337109/…
    en este caso no uso writeFile, pero los últimos tres comandos en el código: JsonOutput.toJson, JsonOutput.prettyPrint, writeFile.
    Lo resuelto en la final, pero gracias por tu aporte. Tuve que agregar as String a mi mapa de propiedades. Consulte stackoverflow.com/questions/53337109/… para más. No entiendo por qué, por lo tanto también le he pedido a stackoverflow.com/questions/53340121/…

    OriginalEl autor

  2. 14

    Encontrado esta pregunta, mientras que yo estaba tratando de hacer algo (que me cree) debe ser sencillo de hacer, pero no fue abordado por la otra respuesta. Si usted ya tiene el JSON que se carga como una cadena dentro de una variable, ¿cómo se puede convertir a un objeto nativo? Obviamente, usted podría hacer new JsonSlurperClassic().parseText(json)
    como la otra respuesta sugiere, pero no hay forma nativa en Jenkins para ello:

    node () {
      def myJson = '{"version":"1.0.0"}';
      def myObject = readJSON text: myJson;
      echo myObject.version;
    }

    Espero que esto ayude a alguien.

    Edit: Como se explica en los comentarios de los «nativos» no es del todo exacta.

    Buena elección, aunque esto no es muy nativas, se requiere de la tubería de utilidad pasos plugin. Un excelente plugin para hacer uso de. toda la documentación aquí
    si tenemos una cadena » [ {«versión»:»1.0.0″} , {«versión»:»2.0.0″}]’ cómo leer la matriz ?
    Usted necesitará Tubería de Utilidad Pasos plugin como se mencionó aquí

    OriginalEl autor

  3. 0

    Esto devolverá el valor de la «versión» de la jsonFile de archivo:

    def getVersion(jsonFile){
    
      def fileContent = readFile "${jsonFile}"
      Map jsonContent = (Map) new JsonSlurper().parseText(fileContent)
      version = jsonContent.get("version")
    
      return version
    
    }

    OriginalEl autor

Dejar respuesta

Please enter your comment!
Please enter your name here