Java 从 JSON 文件中解析 JSON 数组

Java parse JSON array from JSON file

我已经很久没有编程了,但我喜欢它并试图回到正轨。所以这里请见谅problem/question的性质。

我认为我需要的东西非常简单,但我主要是在使用 gson 和 json 上苦苦挣扎 - 很容易读取我的 json 文件,一次一个,并且能够检索值。

我在这里看到了很多方法,但正如我所说的那样,我已经有一段时间了,而且我在我的职业生涯中没有做过很多事情 Java。所以需要一些 guidance/explanation 的最佳方法。

JSON:

[{ "car": "Toyota", "colour": "red", "qty": "1","date_manufactured":"12972632260006" }, { "car": "Hyundai", "colour": "red", "qty": "2","date_manufactured":"1360421626000" }, { "car": "Kia", "colour": "blue", "qty": "2", "date_manufactured":"1265727226000"}, ]

感谢任何帮助我走上正轨的人!

我正在使用 json-simple 来解释如何执行此操作。你的 json 是一个 JSONArray (因为它以方括号开头和结尾),里面有 JSONObject (带对列表的大括号)所以首先你必须使用 [= 提取数组13=] 然后你可以轻松地迭代它并从每个 JSONObject 中获取字段。 这是一个简单示例,它只是向您展示了一种简单易懂的方法:

String json = "[{ \"car\": \"Toyota\", \"colour\": \"red\", \"qty\": \"1\",\"date_manufactured\":\"12972632260006\" }, { \"car\": \"Hyundai\", \"colour\": \"red\", \"qty\": \"2\",\"date_manufactured\":\"1360421626000\" }]";
JSONParser parser = new JSONParser();
try {
    /* It's a JSONArray first. */
    JSONArray tmpArr = (JSONArray)parser.parse(json);
    for(Object obj : tmpArr){
        /* Extract each JSONObject */
        JSONObject tmpObj = (JSONObject) obj;
        System.out.println(tmpObj.get("car"));
        System.out.println(tmpObj.get("colour"));
        System.out.println(tmpObj.get("qty"));
        System.out.println(tmpObj.get("date_manufactured"));
    }
} catch (ParseException e) {
    e.printStackTrace();
}

请注意,您可以使用 Gson,它比 json 更完整-简单但有点棘手。

  1. 创建一个 POJO class 来表示您的 JSON 数据:

    public class CarInfo {  
      String car;
      String colour;
      String qty;
      String date_manufactured; 
    }
    
  2. 使用GSON解析JSON字符串数组

    String carInfoJson = "[{ \"car\": \"Toyota\", \"colour\": \"red\",\"qty\": \"1\",\"date_manufactured\":\"12972632260006\" }, { \"car\":\"Hyundai\", \"colour\":\"red\",\"qty\":\"2\",\"date_manufactured\":\"1360421626000\" }]";
    Gson gson = new Gson();  
    CarInfo[] carInfoArray = gson.fromJson(carInfoJson, CarInfo[].class);  
    
  3. 使用 GSON 从文件中解析 JSON 字符串数组

    String carInfoJson= new String(Files.readAllBytes(Paths.get("filename.txt")));
    Gson gson = new Gson();  
    CarInfo[] carInfoArray = gson.fromJson(carInfoJson, CarInfo[].class);
    
  4. 使用 GSON 从使用 BufferedReader

    的文件中解析 JSON 字符串数组
    BufferedReader reader = null;
    try {
      reader = new BufferedReader(new FileReader(file));
      Gson gson = new Gson(); 
      CarInfo[] carInfoArray = gson.fromJson(reader, CarInfo[].class);
    } catch (FileNotFoundException ex) {
      ...
    } finally {
      ...
    }
    
  5. 使用 GSON 在流模式下使用 JsonReader 从文件中解析 JSON 字符串数组

    try {
      InputStream stream = new FileInputStream("c:\filename.txt");
      JsonReader reader = new JsonReader(new InputStreamReader(stream, "UTF-8"));
      Gson gson = new Gson();
    
      // Read file in stream mode
      reader.beginArray();
      while (reader.hasNext()) {
        CarInfo carInfo = gson.fromJson(reader, CarInfo.class);
      }
      reader.endArray();
      reader.close();
    } catch (UnsupportedEncodingException ex) {
      ...
    } catch (IOException ex) {
      ...
    }