Crear objeto JSON usando Jackson en Java [duplicate]

2 minutos de lectura

Avatar de usuario de Shashank Shekher
Shashank Shekher

Necesito crear una cadena JSON como se muestra a continuación usando Jackson. Sé que ya se ha respondido una pregunta similar aquí: Crear un objeto json usando jackson

Pero mi cadena JSON esperada es un poco diferente de la del ejemplo anterior.

¿Cómo puedo formar el objeto JSON formateado a continuación en Java usando solo Jackson? Además, no prefiero crear un POJO separado para lograr esto.

Rendimiento esperado:

{
    "obj1": {
        "name1": "val1",
        "name2": "val2"
    },
    "obj2": {
        "name3": "val3",
        "name4": "val4"
    },
    "obj3": {
        "name5": "val5",
        "name6": "val6"
    }
}

  • @Yogesh_D Si ve el formato de salida de mi pregunta y el que mencionó, son un poco diferentes. Necesito que la salida esté exactamente en el formato mencionado anteriormente en mi pregunta.

    –Shashank Shekher

    5 de diciembre de 2016 a las 6:04

  • Entonces, ¿quieres convertir esta cadena JSON a Java POJO?

    – Arsen Davtyan

    5 de diciembre de 2016 a las 6:24

  • @arsendavtyan91 No, lo necesito como una cadena JSON.

    –Shashank Shekher

    5 de diciembre de 2016 a las 6:26

  • Esta pregunta no es un duplicado. No debería haber sido marcado como duplicado.

    – Clasificador

    22 de junio de 2020 a las 15:58

  • @Jurass Crear un POJO aquí no tendrá ningún sentido ya que la entrada no es de tipo fijo. Puede diferir de muchas maneras. Espero que hayas leído la pregunta con claridad.

    –Shashank Shekher

    23 de noviembre de 2020 a las 3:33

Avatar de usuario de Sachin Gupta
Sachin Gupta

Prueba esto:

ObjectMapper mapper = new ObjectMapper();
ObjectNode rootNode = mapper.createObjectNode();

ObjectNode childNode1 = mapper.createObjectNode();
childNode1.put("name1", "val1");
childNode1.put("name2", "val2");

rootNode.set("obj1", childNode1);

ObjectNode childNode2 = mapper.createObjectNode();
childNode2.put("name3", "val3");
childNode2.put("name4", "val4");

rootNode.set("obj2", childNode2);

ObjectNode childNode3 = mapper.createObjectNode();
childNode3.put("name5", "val5");
childNode3.put("name6", "val6");
    
rootNode.set("obj3", childNode3);


String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode);
System.out.println(jsonString);

  • Intenté esto pero sigo obteniendo ObjectNode no se puede resolver a un tipo

    – Zeusox

    9 de abril de 2019 a las 18:01

  • esto agrega una barra invertida a las cadenas agregadas. ¿Cómo evitar la barra invertida?

    – Deepak Selvakumar

    2 de julio de 2019 a las 18:12

  • @DeepakSelvakumar si desea evitar esa barra invertida, reemplace writerWithDefaultPrettyPrinter() en la penúltima línea con writer(). ¡Eres bueno para ir!

    – Prasannjeet Singh

    22/09/2021 a las 19:37

¿Ha sido útil esta solución?