如何将List转成JSON字符串:全面指南与实用代码示例
在Java开发中,将List集合转换为JSON字符串是一项常见且重要的操作,特别是在处理前后端数据交互、API响应或配置文件时,本文将详细介绍多种实现List转JSON字符串的方法,包括使用原生库、第三方工具以及不同场景下的最佳实践。
为什么需要将List转成JSON字符串?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有以下优点:
- 易于人阅读和编写
- 易于机器解析和生成
- 独立于语言
- 支持复杂数据结构
将List转换为JSON字符串可以实现:
- 前后端数据传输
- API响应格式化
- 配置数据序列化
- 缓存数据存储
使用Gson库实现List转JSON
Google Gson是Java中最流行的JSON处理库之一,提供了简单易用的API。
添加依赖(Maven)
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
基本转换示例
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
public class ListToJsonWithGson {
public static void main(String[] args) {
// 创建List
List<String> stringList = new ArrayList<>();
stringList.add("Apple");
stringList.add("Banana");
stringList.add("Orange");
// 创建Gson实例
Gson gson = new Gson();
// 转换为JSON字符串
String jsonString = gson.toJson(stringList);
System.out.println(jsonString);
// 输出: ["Apple","Banana","Orange"]
}
}
处理自定义对象List
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// getters and setters
}
public class CustomListToJson {
public static void main(String[] args) {
List<User> userList = new ArrayList<>();
userList.add(new User("Alice", 25));
userList.add(new User("Bob", 30));
Gson gson = new Gson();
String jsonString = gson.toJson(userList);
System.out.println(jsonString);
// 输出: [{"name":"Alice","age":25},{"name":"Bob","age":30}]
}
}
使用Jackson库实现List转JSON
Jackson是另一个功能强大的JSON处理库,广泛应用于Spring框架中。
添加依赖(Maven)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
基本转换示例
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.List;
public class ListToJsonWithJackson {
public static void main(String[] args) throws Exception {
List<String> stringList = new ArrayList<>();
stringList.add("Java");
stringList.add("Python");
stringList.add("JavaScript");
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(stringList);
System.out.println(jsonString);
// 输出: ["Java","Python","JavaScript"]
}
}
处理复杂对象
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.List;
class Product {
private String id;
private String name;
private double price;
public Product(String id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}
// getters and setters
}
public class ComplexListToJson {
public static void main(String[] args) throws Exception {
List<Product> productList = new ArrayList<>();
productList.add(new Product("P001", "Laptop", 999.99));
productList.add(new Product("P002", "Phone", 699.99));
ObjectMapper objectMapper = new ObjectMapper();
// 美化输出
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
String jsonString = objectMapper.writeValueAsString(productList);
System.out.println(jsonString);
}
}
使用org.json库实现List转JSON
org.json是一个轻量级的JSON处理库,适合简单场景。
添加依赖(Maven)
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20231013</version>
</dependency>
转换示例
import org.json.JSONArray;
import java.util.ArrayList;
import java.util.List;
public class ListToJsonWithOrgJson {
public static void main(String[] args) {
List<Integer> numberList = new ArrayList<>();
numberList.add(1);
numberList.add(2);
numberList.add(3);
JSONArray jsonArray = new JSONArray(numberList);
String jsonString = jsonArray.toString();
System.out.println(jsonString);
// 输出: [1,2,3]
}
}
使用Java原生库实现List转JSON
对于简单场景,可以使用Java原生库实现基本转换。
手动实现简单List转JSON
import java.util.ArrayList;
import java.util.List;
public class ManualListToJson {
public static void main(String[] args) {
List<String> stringList = new ArrayList<>();
stringList.add("Red");
stringList.add("Green");
stringList.add("Blue");
StringBuilder jsonBuilder = new StringBuilder("[");
for (int i = 0; i < stringList.size(); i++) {
if (i > 0) {
jsonBuilder.append(",");
}
jsonBuilder.append("\"").append(stringList.get(i)).append("\"");
}
jsonBuilder.append("]");
String jsonString = jsonBuilder.toString();
System.out.println(jsonString);
// 输出: ["Red","Green","Blue"]
}
}
处理特殊情况与最佳实践
处理null值
Gson gson = new GsonBuilder()
.serializeNulls() // 序列化null值
.create();
List<String> listWithNull = Arrays.asList("A", null, "B");
String json = gson.toJson(listWithNull);
// 输出: ["A",null,"B"]
格式化输出
ObjectMapper mapper = new ObjectMapper(); mapper.enable(SerializationFeature.INDENT_OUTPUT); String prettyJson = mapper.writeValueAsString(list);
处理日期类型
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd HH:mm:ss")
.create();
List<Date> dateList = Arrays.asList(new Date(), new Date());
String json = gson.toJson(dateList);
性能考虑
- 对于大量数据,Jackson通常比Gson性能更好
- 重用Gson/ObjectMapper实例,避免重复创建
- 考虑使用流式API处理超大List
完整示例:不同类型List的JSON转换
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import org.json.JSONArray;
import java.util.*;
public class ComprehensiveListToJsonExample {
public static void main(String[] args) throws JsonProcessingException {
// 1. 字符串List
List<String> stringList = Arrays.asList("Hello", "World", "JSON");
// 2. 自定义对象List
List<User> userList = Arrays.asList(
new User("Alice", 25),
new User("Bob", 30)
);
// 3. 混合类型List
List<Object> mixedList = Arrays.asList(
"String", 123, true, new Date()
);
// 使用Gson转换
Gson gson = new Gson();
System.out.println("=== Gson转换结果 ===");
System.out.println("字符串List: " + gson.toJson(stringList));
System.out.println("用户List: " + gson.toJson(userList));
System.out.println("混合List: " + gson.toJson(mixedList));
// 使用Jackson转换
ObjectMapper mapper = new ObjectMapper();
System.out.println("\n=== Jackson转换结果 ===");
System.out.println("字符串List: " + mapper.writeValueAsString(stringList));
System.out.println("用户List: " + mapper.writeValueAsString(userList));
System.out.println("混合List: " + mapper.writeValueAsString(mixedList));
// 使用org.json转换
JSONArray jsonArray = new JSONArray(mixedList);
System.out.println("\n=== org.json转换结果 ===");
System.out.println("混合List: " + jsonArray.toString());
}
static class User {


还没有评论,来说两句吧...