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 更完整-简单但有点棘手。
创建一个 POJO class 来表示您的 JSON 数据:
public class CarInfo {
String car;
String colour;
String qty;
String date_manufactured;
}
使用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);
使用 GSON 从文件中解析 JSON 字符串数组
String carInfoJson= new String(Files.readAllBytes(Paths.get("filename.txt")));
Gson gson = new Gson();
CarInfo[] carInfoArray = gson.fromJson(carInfoJson, CarInfo[].class);
使用 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 {
...
}
使用 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) {
...
}
我已经很久没有编程了,但我喜欢它并试图回到正轨。所以这里请见谅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 更完整-简单但有点棘手。
创建一个 POJO class 来表示您的 JSON 数据:
public class CarInfo { String car; String colour; String qty; String date_manufactured; }
使用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);
使用 GSON 从文件中解析 JSON 字符串数组
String carInfoJson= new String(Files.readAllBytes(Paths.get("filename.txt"))); Gson gson = new Gson(); CarInfo[] carInfoArray = gson.fromJson(carInfoJson, CarInfo[].class);
使用 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 { ... }
使用 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) { ... }