【问题标题】:Get Arraylist file json using java使用java获取Arraylist文件json
【发布时间】:2019-02-04 13:29:43
【问题描述】:

我的代码有问题,我需要在数组列表中提取“材料”标记。示例数据:

[{
    "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);
}

我的目标是阅读数组列表,然后将datos.setArraylist 阅读到我的另一个班级。一切正常,除了读取数组列表

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

【问题讨论】:

  • 什么是rec,它从何而来?
  • 我更新代码

标签: java arrays json


【解决方案1】:

首先必须使您的 JSON 有效。

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

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

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

}

【讨论】:

    【解决方案2】:

    materias 也是一个数组,所以你需要这样的东西:

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

    这不是类型安全的,因此您需要确保数组只有字符串值。

    另外,如果您使用的是 Java 8,您可以迭代这些值并手动存储它们(JsonArray 也是 Collection&lt;JsonValue&gt;

    【讨论】:

    • 抱歉,我如何读取(或查看)该数组的内容? ¡谢谢提前!
    • 嗨 @UsuarioConMiga 刚刚编辑,您可以直接遍历 JsonArray。这是一个 Java 集合 :)
    【解决方案3】:

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

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

    输出

    名称:A114 集团:DAW2 导师:15 材料 0:DWES 材料1:DWEC 材料 2:IW 材料 3:DAW 材料4:IE

    【讨论】:

      【解决方案4】:

      我相信 json 中数组的语法与文件中的不同。例如 - 一个包含简单元素数组的简单完整 json 将是:

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

      在您的文本中,您指定了一个数组,没有打开和关闭 JSON '{' 和 '}'。此外,您需要命名数组元素(上例中的“联系人”)。我认为您想要的是(我使用“arrayName”作为数组元素名称):

          {"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 } ] }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-14
        • 1970-01-01
        • 1970-01-01
        • 2015-01-20
        相关资源
        最近更新 更多