获得使用Java ArrayList的文件JSON

问题描述 投票:2回答:4

我有我的代码的问题,我需要提取的ArrayList中的“材料”的标记。实施例的数据:

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

我想这一点,工作,但我需要的数组列表的内容:

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);
}

我的目标是读取数组列表,然后qazxsw POI到我的另一个类。除了阅读ArrayList的一切工作正常

PD:我使用的Maven下载的Java,执行我使用 “的javac -cp ./*:program.java”

java arrays json
4个回答
1
投票

datos.setArraylist也是一个数组,所以你需要这样的:

materias

这不是类型安全的,所以你需要确保该数组将只具有字符串值。

另外,如果您使用的是Java 8中,您可以遍历值,并将其手动存储(JSONArray materias = obj.getJsonArray("materias"); List<String> materiasList = materias.getValuesAs(String.class); 也是JsonArray


1
投票

快速创建短测试实现您的需求:

Collection<JsonValue>

产量

名:A114组:导师DAW2:15主题0:DWES受试者1:DWEC检体; 2:IW主题3:DAW受试者4:IE


0
投票

首先得让你的JSON有效。

    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));
        }
    }

其次,你可以尝试以下方法:

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

0
投票

我相信,在JSON数组的语法是,你必须在你的文件的不同。例如 - 一个简单的完整JSON包含简单元件的阵列将是:

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());
            }

}

在你的文字,你指定一个阵列,无需开启和关闭JSON“{”和“}”。此外,就需要以命名数组元素(在上面的例子中“接触”)。我认为,你想会是什么(我用的数组元素名称“arrayName中”):

    {"contacts":[
      { "firstName":"John", "lastName":"Doe" },
      { "firstName":"Jen", "lastName":"Smith" },
      { "firstName":"David", "lastName":"Jones" }
    ]}
© www.soinside.com 2019 - 2024. All rights reserved.