请用java写一段程序,读取json文件中的数据并显示,json文件包括多组数据,同时给出json文件内容
时间: 2023-12-23 15:03:26 浏览: 127
好的,下面是使用 Java 读取 JSON 数据并显示的示例代码:
首先需要引入 JSON 相关的库,比如 fastjson、gson、jackson 等。这里以 fastjson 为例,示例代码如下:
```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.List;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class ReadJsonFile {
public static void main(String[] args) {
try {
// 读取 JSON 文件
BufferedReader reader = new BufferedReader(new FileReader("data.json"));
StringBuilder jsonString = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
jsonString.append(line);
}
reader.close();
// 解析 JSON 数据
JSONObject jsonObject = JSON.parseObject(jsonString.toString());
// 遍历每组数据
for (String key : jsonObject.keySet()) {
JSONArray jsonArray = jsonObject.getJSONArray(key);
System.out.println(key + ":");
// 遍历每个对象
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject obj = jsonArray.getJSONObject(i);
String name = obj.getString("name");
int age = obj.getIntValue("age");
System.out.println(name + "," + age + "岁");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
JSON 文件内容(假设文件名为 data.json):
```json
{
"data1": [
{"name": "张三", "age": 20},
{"name": "李四", "age": 22},
{"name": "王五", "age": 24}
],
"data2": [
{"name": "Tom", "age": 18},
{"name": "Jerry", "age": 19},
{"name": "Bob", "age": 20}
]
}
```
解释一下代码:
1. `BufferedReader reader = new BufferedReader(new FileReader("data.json"));` 表示创建一个读取文件的对象。
2. `StringBuilder jsonString = new StringBuilder();` 表示创建一个空的字符串缓冲区。
3. `while ((line = reader.readLine()) != null) {...}` 表示逐行读取文件内容,并将每行内容添加到字符串缓冲区中。
4. `reader.close();` 表示关闭文件读取对象。
5. `JSONObject jsonObject = JSON.parseObject(jsonString.toString());` 表示将字符串缓冲区中的 JSON 数据解析为 JSONObject 对象。
6. `for (String key : jsonObject.keySet()) {...}` 表示遍历每组数据,其中 `key` 表示数据的键(即 "data1" 或 "data2")。
7. `JSONArray jsonArray = jsonObject.getJSONArray(key);` 表示获取当前组数据的 JSON 数组。
8. `for (int i = 0; i < jsonArray.size(); i++) {...}` 表示遍历当前组数据的每个对象。
9. `JSONObject obj = jsonArray.getJSONObject(i);` 表示获取当前对象的 JSONObject。
10. `String name = obj.getString("name");` 表示获取当前对象的 name 属性。
11. `int age = obj.getIntValue("age");` 表示获取当前对象的 age 属性。
12. `System.out.println(name + "," + age + "岁");` 表示将当前对象的属性打印到控制台中。
最终效果如下:
```
data1:
张三,20岁
李四,22岁
王五,24岁
data2:
Tom,18岁
Jerry,19岁
Bob,20岁
```
阅读全文