足球直播
足球直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
足球直播
足球直播
搜狗输入法
搜狗输入法
快连
快连
快连
快连下载
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
JSON字符串如何转换List:全面解析与实践指南
在Java开发中,JSON字符串与List集合之间的转换是一个非常常见的操作,无论是处理API返回的数据,还是配置文件解析,都离不开这种转换,本文将详细介绍JSON字符串转换为List的各种方法、注意事项及最佳实践。
常用JSON库介绍
Java生态中有多个优秀的JSON处理库,其中最常用的有:
- Jackson:高性能的JSON处理器,Spring Framework默认使用
- Gson:Google开发的JSON库,简单易用
- Fastjson:阿里巴巴开源的JSON库,性能优异
使用Jackson转换JSON字符串为List
添加依赖
Maven项目中添加Jackson核心库依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
基本转换示例
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.Map;
public class JacksonJsonToList {
public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
// 示例JSON字符串
String jsonString = "[{\"name\":\"张三\",\"age\":25},{\"name\":\"李四\",\"age\":30}]";
// 转换为List<Map>
List<Map<String, Object>> list = objectMapper.readValue(jsonString,
new TypeReference<List<Map<String, Object>>>() {});
// 转换为List<自定义对象>
List<User> userList = objectMapper.readValue(jsonString,
new TypeReference<List<User>>() {});
}
static class User {
private String name;
private int age;
// getters and setters
}
}
处理复杂类型
对于包含嵌套对象的JSON,需要先定义对应的Java类:
public class JacksonComplexExample {
public static void main(String[] args) throws Exception {
String complexJson = "{\"users\":[{\"name\":\"张三\",\"address\":{\"city\":\"北京\",\"street\":\"朝阳路\"}}]}";
ObjectMapper mapper = new ObjectMapper();
TypeReference<Map<String, List<UserWithAddress>>> typeRef =
new TypeReference<Map<String, List<UserWithAddress>>>() {};
Map<String, List<UserWithAddress>> result = mapper.readValue(complexJson, typeRef);
List<UserWithAddress> users = result.get("users");
}
static class UserWithAddress {
private String name;
private Address address;
// getters and setters
}
static class Address {
private String city;
private String street;
// getters and setters
}
}
使用Gson转换JSON字符串为List
添加依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
基本转换示例
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
public class GsonJsonToList {
public static void main(String[] args) {
Gson gson = new Gson();
String jsonString = "[{\"name\":\"张三\",\"age\":25},{\"name\":\"李四\",\"age\":30}]";
// 转换为List<Map>
Type listType = new TypeToken<List<Map<String, Object>>>() {}.getType();
List<Map<String, Object>> list = gson.fromJson(jsonString, listType);
// 转换为List<自定义对象>
Type userListType = new TypeToken<List<User>>() {}.getType();
List<User> userList = gson.fromJson(jsonString, userListType);
}
static class User {
private String name;
private int age;
// getters and setters
}
}
使用Fastjson转换JSON字符串为List
添加依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
基本转换示例
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import java.util.List;
import java.util.Map;
public class FastjsonJsonToList {
public static void main(String[] args) {
String jsonString = "[{\"name\":\"张三\",\"age\":25},{\"name\":\"李四\",\"age\":30}]";
// 转换为List<Map>
List<Map<String, Object>> list = JSON.parseObject(jsonString,
new TypeReference<List<Map<String, Object>>>() {});
// 转换为List<自定义对象>
List<User> userList = JSON.parseObject(jsonString,
new TypeReference<List<User>>() {});
}
static class User {
private String name;
private int age;
// getters and setters
}
}
常见问题与解决方案
JSON字符串格式错误
问题:转换时抛出JsonParseException
解决:使用JSON格式化工具验证字符串格式,确保JSON语法正确
类型不匹配异常
问题:当JSON中的数据类型与Java对象属性类型不匹配时
解决:确保Java类的属性类型与JSON中对应的值类型一致,或使用@JsonFormat等注解进行类型转换
空值处理
问题:JSON中的null值导致转换失败
解决:在Java类中使用包装类型(如Integer而不是int)或在反序列化配置中启用FAIL_ON_NULLS为false
日期格式处理
问题:JSON中的日期字符串无法正确转换为Java日期对象
解决:使用日期格式注解(如@JsonFormat(pattern="yyyy-MM-dd"))或配置日期格式
性能优化建议
- 重用ObjectMapper/Gson实例:这些类是线程安全的,可以全局重用
- 避免频繁转换:对于频繁访问的数据,考虑直接使用JSON对象
- 使用流式API:对于大JSON文件,使用
JsonParser或JsonReader流式处理 - 启用缓存:对于固定结构的JSON,可以考虑缓存解析结果
最佳实践总结
- 根据项目需求选择合适的JSON库(Jackson适合Spring项目,Gson适合简单场景,Fastjson适合高性能需求)
- 为复杂JSON结构定义对应的Java类,提高代码可读性和维护性
- 使用
TypeReference处理泛型类型,避免类型转换异常 - 添加适当的异常处理,确保程序健壮性
- 对于生产环境,建议添加JSON Schema验证,确保数据结构正确
通过本文的介绍,相信你已经了JSON字符串转换为List的各种方法,在实际开发中,根据项目需求和团队技术栈选择合适的方案,并注意处理各种边界情况,才能写出健壮、高效的代码。



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