2
votes

Obtenir le fichier Arraylist json en utilisant java

J'ai des problèmes avec mon code, j'ai besoin d'extraire le balisage "materias" dans l'arraylist. Exemple de données:

try { // this read the JSON file
    line = new String(Files.readAllBytes(Paths.get("fileAulas")));
} catch (Exception ex) {
    ex.printStackTrace();
}
JSONArray recs = new JSONArray(line);
for (Object rec : recs) {

    Aula datos = new Aula();

    JSONObject obj = ((JSONObject) rec);
    String name = obj.getString("name");    
    //datos.setNombre(name);

    String grupo = obj.getString("grupo");
    //datos.setGrupo(grupo);

    int tutor = obj.getInt("tutor");
    //datos.setTutor(tutor);
}

J'ai essayé ceci, fonctionne mais j'ai besoin du contenu de l'arraylist:

[{
    "name": "A114",
    "grupo": "DAW2",
    "tutor": 15,
    "materias": ["DWES", "DWEC", "IW", "DAW", "IE"]
}]

Mon objectif est de lire l'arraylist puis datos.setArraylist à mon autre classe. Tout fonctionne bien sauf lire l'arraylist

PD: J'utilise java téléchargé depuis Maven, pour exécuter j'utilise "javac -cp ./*: program.java"


2 commentaires

Qu'est-ce que rec et d'où vient-il?


Je mets à jour le code


4 Réponses :


1
votes

materias est également un tableau, vous avez donc besoin de quelque chose comme:

JSONArray materias = obj.getJsonArray("materias");
List<String> materiasList = materias.getValuesAs(String.class);

Ce n'est pas de type sécurisé, vous devez donc vous assurer que le tableau n'aura que Valeurs de chaîne.

De plus, si vous utilisez Java 8, vous pouvez parcourir les valeurs et les stocker manuellement ( JsonArray est également une Collection code>)


2 commentaires

désolé, mais comment puis-je lire (ou voir) le contenu de ce tableau? ¡Merci pour votre avance!


Salut @UsuarioConMiga vient de modifier, vous pouvez itérer directement sur un JsonArray. C'est une collection Java :)



0
votes

Tout d'abord, vous devez rendre votre JSON valide.

for (JsonElement rec : recs) {

    Aula datos = new Aula();

    JSONObject obj = rec.getAsJsonObject();
    String name = obj.get("name").getAsString();    
    //datos.setNombre(name);

    String grupo = obj.get("grupo").getAsString();
    //datos.setGrupo(grupo);

    int tutor = obj.get("tutor").getAsInt();

     JsonObject obj = rec.getAsJsonObject();
      JsonArray materias = obj.getAsJsonArray("materias");

          List<String> materiasList = new ArrayList<>();

for (JsonElement item:
                 materias) {
                materiasList.add(item.getAsString());
            }

}

Deuxièmement, vous pouvez essayer ce qui suit:

[{
        "name": "A114",
        "grupo": "DAW2",
        "tutor": 15,
        "materias": ["DWES", "DWEC", "IW", "DAW", "IE"]
    }]


0 commentaires

1
votes

Mise en œuvre de tests courts créés rapidement de vos besoins:

    String json = "[{ \"name\":\"A114\",\"grupo\": \"DAW2\",\"tutor\":15,\"materias\": [\"DWES\",\"DWEC\",\"IW\",\"DAW\",\"IE\"]}]";

    JSONArray objectArray = new JSONArray(json);

    for (int x = 0; x < objectArray.length(); x++) {
        JSONObject obj = objectArray.getJSONObject(x);

        System.out.println("Name: " + obj.get("name"));
        System.out.println("Grupo: " + obj.get("grupo"));
        System.out.println("Tutor: " + obj.get("tutor"));

        JSONArray materias = obj.getJSONArray("materias");
        for (int y = 0; y < materias.length(); y++) {
            System.out.println("Materia " + y + ": " + materias.get(y));
        }
    }

Sortie

Nom: A114 Groupe: DAW2 Tuteur: 15 Materia 0: DWES Materia 1: DWEC Materia 2: IW Materia 3: DAW Materia 4: IE


0 commentaires

0
votes

Je pense que la syntaxe d'un tableau dans json est différente de celle que vous avez dans votre fichier. Par exemple - un simple json complet qui contient un tableau d'éléments simples serait:

    {"arrayName":[{ "name":"A114","grupo": "DAW2","tutor":15,"materias":["DWES","DWEC","IW","DAW","IE"] }, 
      { "name":"121","grupo": "DAW1","tutor":8,"materias":["PROGRA","BD","SIS","LM","FOL"] }, 
      { "name":"A112","grupo": "AUTO1","tutor":5 }, 
      { "name":"A127","grupo": "ASIR1","tutor":2 }, 
      { "name":"A114","grupo": "SMR2","tutor":11 }, 
      { "name":"A128","grupo": "ASIR2","tutor":9,"materias":["IAW","ABD","ASIS","SI","IE"] }, 
      { "name":"A125","grupo": "ADM2","tutor":12 } ] }

Dans votre texte, vous spécifiez un tableau, sans l'ouverture et la fermeture du JSON '{' et '}' . En outre, vous devrez nommer l'élément du tableau ("contacts" dans l'exemple ci-dessus). Je pense que ce que vous voulez serait (j'ai utilisé "arrayName" pour le nom de l'élément du tableau):

    {"contacts":[
      { "firstName":"John", "lastName":"Doe" },
      { "firstName":"Jen", "lastName":"Smith" },
      { "firstName":"David", "lastName":"Jones" }
    ]}


0 commentaires