JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。它基于JavaScript的一个子集,格式简洁且易于读写,同时也易于机器解析和生成。在Java中,将JSON字符串转换为Map或List是常见的操作,这在处理服务器返回的数据或者进行数据序列化时非常有用。
JSON字符串的结构主要包括对象(键值对的集合,用花括号{}包围)和数组(有序元素的集合,用方括号[]包围)。在Java中,我们可以使用各种库,如Gson、Jackson、org.json等,来完成这个转换。
1. Gson库:
Gson是由Google提供的一个Java库,能够将Java对象转换为JSON字符串,反之亦然。将JSON字符串转化为Map,可以使用`fromJson()`方法:
```java
import com.google.gson.Gson;
import java.util.Map;
String jsonString = "{\"key\":\"value\"}";
Gson gson = new Gson();
Map<String, Object> map = gson.fromJson(jsonString, Map.class);
```
转换成List则需要指定List元素类型:
```java
import com.google.gson.Gson;
import java.util.List;
String jsonString = "[{\"key\":\"value\"}]";
Gson gson = new Gson();
List<Map<String, Object>> list = gson.fromJson(jsonString, new TypeToken<List<Map<String, Object>>>(){}.getType());
```
2. Jackson库:
Jackson是另一个流行的JSON处理库,提供了`ObjectMapper`类来实现JSON与Java对象之间的转换。
```java
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;
String jsonString = "{\"key\":\"value\"}";
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map = mapper.readValue(jsonString, Map.class);
String jsonArrayString = "[{\"key\":\"value\"}]";
List<Map<String, Object>> list = mapper.readValue(jsonArrayString, new TypeReference<List<Map<String, Object>>>(){});
```
3. org.json库:
这个库提供了`JSONObject`和`JSONArray`类,可以直接解析JSON字符串。
```java
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
String jsonString = "{\"key\":\"value\"}";
JSONObject jsonObject = new JSONObject(jsonString);
Map<String, Object> map = new HashMap<>();
for (String key : jsonObject.keySet()) {
map.put(key, jsonObject.get(key));
}
String jsonArrayString = "[{\"key\":\"value\"}]";
JSONArray jsonArray = new JSONArray(jsonArrayString);
List<Map<String, Object>> list = new ArrayList<>();
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject obj = jsonArray.getJSONObject(i);
Map<String, Object> itemMap = new HashMap<>();
for (String key : obj.keySet()) {
itemMap.put(key, obj.get(key));
}
list.add(itemMap);
}
```
以上三种库各有优缺点,Gson和Jackson性能较好,org.json库轻量级但功能相对简单。在实际开发中,应根据项目需求和性能要求选择合适的库。同时,理解这些库的工作原理和使用方式对于提升编程效率至关重要。