es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

JSONBuilder en Groovy agrega comillas de citas incorrectas.

Estoy intentando leer un archivo json, editar algunas partes y luego volver a analizarlo como un archivo json. El objetivo es cambiar el valor de una página de Confluence. Estoy utilizando el código groovy en un pipelina de Jenkins. Aquí está:

def changeValue(){
    def json_map = readJSON file: '/tmp/updater.json';

    def body_content = '{"storage":{"value":"<h1>test</h1>","representation":"storage"}}';

    json_map.body = body_content;

    json_as_string = new JsonBuilder(json_map).toPrettyString().replaceAll("\\\"", "\"");

    print json_as_string;
}

Este es el contenido del archivo updater.json:

{
    "id":"redacted",
    "type":"page",
    "title":"redacted",
    "space":{"key":"redacted"},
    "body":{"storage":{"value":"<h1>wrong</h1>","representation":"storage"}},
    "version":{
        "number":6
    }
}

Esto es lo que obtengo:

{
    "id": "redacted",
    "type": "page",
    "title": "redacted",
    "space": {
        "key": "redacted"
    },
    "body": {"storage":{"value":"<h1>test</h1>","representation":"storage"}},
    "version": {
        "number": 6
    }
}

Como puedes ver, agregó comillas alrededor del bloque del cuerpo. ¿Cómo puedo deshacerme de ellas?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para eliminar las comillas adicionales, puedes usar la clase JsonOutput del paquete groovy.json. Aquí tienes un ejemplo de cómo puedes modificar tu función changeValue() para usar JsonOutput:

    import groovy.json.JsonBuilder
    import groovy.json.JsonOutput
    
    def changeValue(){
        def json_map = readJSON file: '/tmp/updater.json'
    
        def body_content = '{"storage":{"value":"<h1>test</h1>","representation":"storage"}}'
    
        json_map.body = JsonOutput.toJson(JsonOutput.fromString(body_content))
    
        json_as_string = new JsonBuilder(json_map).toPrettyString().replaceAll("\\\\\"", "") // Eliminar escapes innecesarios
    
        print json_as_string
    }
    

    Al utilizar JsonOutput para serializar la cadena body_content en un objeto JSON, podemos evitar que se añadan comillas adicionales en el resultado final. Además, se eliminan los escapes innecesarios en el resultado con el método replaceAll().

Comments are closed.