Convierta una cadena con caracteres anidados en un formato similar a json en java

Hay una cadena como:

String query = "param1, param2, param3{npam1, npam2, npam3{nipam1, nipam2}}";

Esta cadena debe procesarse en el formato:

{

    param1: param1, 
    param2: param2, 
    param3: {

        npam1: param3.npam1, 
        npam2: param3.npam2, 
        npam3: {

            nipam1: param3.npam3.nipam1, 
            nipam2: param3.npam3.nipam2

        }

    }

}

Ya lo he hecho hasta 2 anidados, pero el punto es que la cadena a consultar se puede extender a cualquier número de rizos anidados.

Respuesta 1

Lo que hice fue iterar sobre los objetos en la cadena y luego iterar sobre los atributos de cada objeto. Con suerte, te ayudará a resolver tu problema. También en su Cadena inicial, falta el paréntesis abierto y el paréntesis cerrado, así que los agregué.

    String jsonWithOutFormat = "param1, param2, param3{npam1, npam2, npam3{nipam1, nipam2}}";
    jsonWithOutFormat = jsonWithOutFormat.replaceAll(" ", "");
    String json = "";
    String[] objectsInString = jsonWithOutFormat.split("[{]");
    List<String> nestedObjects = new ArrayList<>();
    json += "{";
    for (int i = 0; i < objectsInString.length; i++) {
        String[] objectAttributes = objectsInString[i].split("[,]");
        if(i==0)
            nestedObjects.add(objectAttributes[objectAttributes.length-1] + ".");
        else
            nestedObjects.add(nestedObjects.get(i-1)+objectAttributes[objectAttributes.length-1] + ".");
        for (int j = 0; j < objectAttributes.length; j++) {
            if(!(j == objectAttributes.length-1)) {
                if(i != 0)
                    json+=  objectAttributes[j] + ": " +  nestedObjects.get(i-1) + objectAttributes[j]  + ", ";
                else
                    json+=  objectAttributes[j] + "\"" + ": " + "\"" + objectAttributes[j] + "\"" + ", ";
            }
            else {
                if(!(i == objectsInString.length-1))
                    json+=  objectAttributes[j] + ": {";
                else {
                    json+= objectAttributes[j].replaceAll("}", "")  + ": " + nestedObjects.get(i-1) + objectAttributes[j];
                }
            }
        }
    }
    json += "}";
    System.out.print("\n" + json);
}
Respuesta: 2

Tengo dos contenedores docker que estoy construyendo usando docker-compose. Uno de los cuales inicializa los ibm mqs y otro es el que expone los puntos finales de descanso (usando el proyecto SpringBoot) para enviar mensajes a ...

Tengo un Mapa, cuya clave es una Cadena, que contiene las siguientes Teclas: "Buenos días" "Cómo estás hoy" "Este día es maravilloso" "Gracias de antemano" Me gustaría saber si hay un ...

Estoy tratando de eliminar por completo el logotipo de la hoja de arranque de primavera en el navegador web. Imagen adjunta para referencia: Intento 1: Se agregaron estos dos en el archivo application.properties spring.mvc.favicon.enabled = ...

Me gustaría obtener el texto dentro de un elemento que tiene dos atributos, la muestra xml es la siguiente <? Xml version = "1.0" encoding = "UTF-8"?> <consultas> <query pagename = "master" .. .