您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Java之JsonArray怎么用
## 前言
在Java开发中,处理JSON数据是常见的需求。`JsonArray`作为JSON数组的Java表示形式,广泛用于解析、构建和操作JSON数组结构。本文将全面介绍`JsonArray`的使用方法,涵盖主流JSON库(如`org.json`、`Gson`、`Jackson`)的实现,并通过代码示例演示常见操作。
---
## 一、JsonArray基础概念
### 1.1 什么是JsonArray
`JsonArray`是JSON格式中的数组类型,表现为有序的值集合:
- 用方括号`[]`包裹
- 元素可以是字符串、数字、布尔值、对象或其他数组
- 元素之间用逗号分隔
示例JSON数组:
```json
["Java", "Python", 42, true, {"key": "value"}]
Java中处理JsonArray
的主要库:
库名称 | Maven依赖 | 特点 |
---|---|---|
org.json | org.json:json:20231013 |
轻量级,Android内置 |
Gson | com.google.code.gson:gson:2.10.1 |
Google出品,易用性强 |
Jackson | com.fasterxml.jackson.core:jackson-databind:2.15.2 |
高性能,功能全面 |
import org.json.JSONArray;
// 创建空数组
JSONArray jsonArray = new JSONArray();
// 通过集合创建
List<String> list = Arrays.asList("A", "B", "C");
JSONArray fromList = new JSONArray(list);
// 直接解析JSON字符串
String jsonStr = "[\"apple\", \"banana\"]";
JSONArray parsedArray = new JSONArray(jsonStr);
// 添加元素
jsonArray.put("Java");
jsonArray.put(42);
jsonArray.put(new JSONObject().put("key", "value"));
// 获取元素
String first = jsonArray.getString(0); // "Java"
int number = jsonArray.getInt(1); // 42
// 遍历数组
for (int i = 0; i < jsonArray.length(); i++) {
System.out.println(jsonArray.get(i));
}
// 转换为字符串
String arrayString = jsonArray.toString();
// 创建嵌套结构
JSONArray nestedArray = new JSONArray()
.put(new JSONObject().put("name", "Alice"))
.put(new JSONArray().put(1).put(2));
// 输出结果:
// [{"name":"Alice"},[1,2]]
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonParser;
// 解析JSON字符串
String json = "[\"red\", \"green\", \"blue\"]";
JsonArray colors = JsonParser.parseString(json).getAsJsonArray();
// 创建新数组
JsonArray newArray = new JsonArray();
newArray.add("Gson");
newArray.add(3.14);
newArray.add(true);
Gson gson = new Gson();
// 数组 ↔ 对象转换
List<String> list = gson.fromJson(colors, new TypeToken<List<String>>(){}.getType());
JsonArray converted = gson.toJsonTree(list).getAsJsonArray();
// 处理混合类型
JsonArray mixed = new JsonArray();
mixed.add("text");
mixed.add(100);
mixed.add(new JsonObject());
// 生成JSON
String jsonOutput = gson.toJson(newArray);
// 解析大文件(内存高效)
try (JsonReader reader = new JsonReader(new FileReader("data.json"))) {
JsonArray bigArray = JsonParser.parseReader(reader).getAsJsonArray();
}
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
ObjectMapper mapper = new ObjectMapper();
// 创建数组
ArrayNode arrayNode = mapper.createArrayNode();
arrayNode.add("Jackson");
arrayNode.add(2023);
// 解析JSON
String jsonInput = "[{\"id\":1}, {\"id\":2}]";
JsonNode rootNode = mapper.readTree(jsonInput);
// 流式API生成
String json = mapper.writeValueAsString(arrayNode);
// 使用POJO转换
List<Person> persons = mapper.readValue(
"[{\"name\":\"Bob\"}, {\"name\":\"Alice\"}]",
new TypeReference<List<Person>>(){});
// 构建复杂结构
ArrayNode complexArray = mapper.createArrayNode()
.add(mapper.createObjectNode().put("x", 10))
.add(mapper.createArrayNode().add(1).add(2));
// 检查存在性(Gson示例)
boolean hasElement = jsonArray.contains("searchValue");
// 删除元素(org.json)
jsonArray.remove(1);
// 合并数组(Jackson)
ArrayNode combined = arrayNode1.addAll(arrayNode2);
// 转换为List(Gson)
List<String> stringList = gson.fromJson(jsonArray, List.class);
// 转换为Java数组(org.json)
String[] strArray = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
strArray[i] = jsonArray.getString(i);
}
// Java8 Stream处理(Jackson)
List<String> names = StreamSupport.stream(rootNode.spliterator(), false)
.filter(node -> node.has("name"))
.map(node -> node.get("name").asText())
.collect(Collectors.toList());
操作 | org.json | Gson | Jackson |
---|---|---|---|
小数据解析 | 最快 | 中等 | 较慢 |
大数据处理 | 差 | 中等 | 最优 |
内存占用 | 最低 | 中等 | 较高 |
org.json
Gson
Jackson
JSONException
(org.json)或JsonParseException
(Gson/Jackson)JsonArray
的不可变版本(如Gson的JsonImmutableArray
)解析天气API返回的JSON数组:
{
"forecast": [
{"day": "Mon", "temp": 22},
{"day": "Tue", "temp": 24}
]
}
String apiResponse = "..."; // 实际API调用结果
ObjectNode root = (ObjectNode) mapper.readTree(apiResponse);
ArrayNode forecast = (ArrayNode) root.get("forecast");
forecast.forEach(day -> {
System.out.printf("%s: %d°C\n",
day.get("day").asText(),
day.get("temp").asInt());
});
Type responseType = new TypeToken<Map<String, List<WeatherItem>>>(){}.getType();
Map<String, List<WeatherItem>> result = gson.fromJson(apiResponse, responseType);
result.get("forecast").forEach(item ->
System.out.println(item.day + ": " + item.temp));
掌握JsonArray
的使用是Java开发者处理JSON数据的必备技能。本文介绍了三种主流库的实现方式,建议根据项目需求选择合适的工具。实际开发中还需注意:
- 处理边界情况(空数组、null值等)
- 考虑使用Optional
避免NPE
- 对于超大数据集,考虑专用库如JsonPath
附录: - org.json官方文档 - Gson用户指南 - Jackson文档 “`
注:本文代码示例经过简化,实际使用时请添加必要的异常处理。文章长度约3250字(含代码),可根据需要调整具体实现细节。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。