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.

Cómo eliminar caracteres no deseados de una cadena (usando las APIs de colecciones de Java8)

Estoy trabajando en un procesamiento de colecciones/java8 que me está dando problemas. Tengo una cadena de entrada similar a la siguiente:

String test = "{\"module\":\"taping\",\"id\":\"abc123\"}";

Estoy utilizando la siguiente conversión de String a Map para ayudar a construir el json posterior:

Map<string, string=""> reconstructedUtilMap = Arrays.stream(test.split(","))
                .map(s -> s.split(":", 2))
                .collect(Collectors.toMap(s -> s[0], s -> s[1]));

El problema que tengo es que el resultado:

"id" -> "abc123"}
{"module" -> "taping"

todavía tiene las llaves y las comillas escapadas. Necesito eliminar las llaves de apertura y cierre, así como las comillas escapadas, porque al convertirlo a json (el objetivo final), deja las llaves y las comillas escapadas:

JsonObject json = new JsonObject();
JsonObject fieldObj = new JsonObject();

for (Map.Entry<string,string> entry : reconstructedUtilMap.entrySet()) {
    fieldObj.add(entry.getKey(), jsonSerializationContext.serialize(entry.getValue()));
}

json.add("result",  fieldObj);

y el resultado json es:

"result": {
      "\"id\"": "\"abc123\"}",
      "{\"module\"": "\"screening\""
    }

Necesito que sea:

"result": {
      "id": "abc12",
      "module": "screening"
    }

Deseo mantener la idea de utilizar java8 para eliminar los caracteres no deseados. Agradecería cualquier idea. ¡Gracias!</string,string></string,>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una forma de eliminar los caracteres no deseados es modificar el código de conversión de Cadena-a-Mapa utilizando regex para eliminar las llaves de apertura y cierre y las comillas escapadas de la cadena de entrada antes de dividirla en pares clave-valor. Aquí hay un ejemplo:

    Map<string, string=""> reconstructedUtilMap = Pattern.compile("[{},\"]+")
            .splitAsStream(test)
            .map(s -> s.split(":", 2))
            .collect(Collectors.toMap(s -> s[0], s -> s[1]));
    

    El patrón regex [{},"]+ coincide con una o más ocurrencias de los caracteres {, }, ,, y “, que son los caracteres que queremos eliminar. Usamos Pattern.compile() para crear un patrón regex compilado, luego usamos splitAsStream() para dividir la cadena de entrada en un flujo de cadenas basado en el patrón regex. Luego aplicamos las mismas operaciones map() y collect() como antes para convertir el flujo en un Mapa.

    Con esta modificación, el Mapa resultante reconstructedUtilMap debería tener los pares clave-valor sin llaves de apertura o cierre ni comillas escapadas.</string,>

Comments are closed.