Entonces, intenté algo con Java que se parece a esto, pero el resultado no se ve bien.

Uno de los ejemplos de código con los que intenté hacer un archivo json con:

        String name = "usericals.json";
        JSONObject jsonObj = new JSONObject();

        JSONArray scene = new JSONArray();
        JSONArray element = new JSONArray();


        jsonObj.put("scene", scene);
        for (int i = 0; i < 1; i++) {
            for (int ii = 0; ii < 1; ii++) {
                element.put(write);
            }
            jsonObj.put("element", element);

        }
        scene.put(element);

        try (PrintWriter writer = new PrintWriter("new.json", "UTF-8")) {
            writer.write(jsonObj.toString(4));
        } catch (Exception ex) {
            System.out.println("exception " + ex);
        }

Quería hacer un archivo json que se vea así, pero no puedo hacerlo bien. Estoy creando con mi código arriba solo matrices. ¿Alguien tiene una idea o sugerencia?

El archivo JSON que quiero:

{
  "scene": [
    {
      "id": 0,
      "calendar_event": "urlaub",
      "element": [
        {
          "anything": ""
        },
        {
          "anything": ""
        }
      ]
    },
    {
      "id": 1,
      "calendar_event": "urlauburlaub",
      "element": [
        {
          "anything": ""
        },
        {
          "anything": ""
        }
      ]
    },
    {
      "id": 2,
      "calendar_event": "urlauburlauburlaub",
      "element": [
        {
          "anything": ""
        },
        {
          "device": "",
          "anything": ""
        }
      ]
    },
    {
      "id": 3,
      "calendar_event": "urlauburlauburlauburlaub",
      "element": [
        {
          "anything": ""
        },
        {
          "anything": ""
        }
      ]
    }
  ]
}
2
codemanian_helloworld 25 feb. 2020 a las 21:46

2 respuestas

La mejor respuesta

Use JSONObject recursivamente. Pruebe algo como esto (agrego un poco de sangría adicional para que pueda leerse fácilmente, pero en proyectos reales mejor use las funciones):

JSONObject json = new JSONObject();
  JSONArray scene = new JSONArray();
    JSONObject node = new JSONObject();
    node.put("id", 0);
    node.put("calendar_event", "urlaub");
      JSONArray element = new JSONArray();
        JSONObject enode = new JSONObject();
        enode.put("anything", "");
      element.add(enode);
      //...
    node.put("element", element);
  scene.add(node);
json.put("scene", scene);
//...

Tenga en cuenta que genera los JSON manualmente, pero hay otras bibliotecas que escanean objetos para generar json. Dependiendo de sus necesidades, podría ser más fácil, pero recuerde que al hacer esto, va a sobrecargar todo porque necesitará guardar en la memoria dos copias del mismo árbol. También tratar con estructuras jerárquicas puede ser un problema al usar objetos java simples.

0
user1039663 25 feb. 2020 a las 19:10

Sugiero usar la biblioteca para eso. Jackson o GSON serían una buena opción.

En lugar de crear manualmente json campo por campo, podría crear POJOs y luego usar el ObjectMapper de Jackson. Ejemplo:

public class Car {

    private String color;
    private String type;

    // standard getters setters
}

Y entonces

ObjectMapper objectMapper = new ObjectMapper();
Car car = new Car("yellow", "renault");
objectMapper.writeValue(new File("target/car.json"), car);

Que dará

{"color":"yellow","type":"renault"}

¡Google tiene muchos tutoriales de jackson!

1
stream28 25 feb. 2020 a las 18:58