足球直播
足球直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
足球直播
足球直播
搜狗输入法
搜狗输入法
快连
快连
快连
快连下载
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
集合里放JSON怎么转:从存储到数据解析的完整指南
在Java开发中,集合(如List、Set、Map)是最常用的数据结构之一,而JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,广泛应用于前后端数据交互、配置文件存储等场景,当我们需要在集合中存储JSON数据(如从API获取的JSON字符串、需批量处理的JSON对象),或从集合中提取JSON数据时,就涉及到“集合与JSON之间的转换”问题,本文将详细讲解集合中存储JSON的常见方式、如何将集合转换为JSON,以及如何将JSON解析为集合,并提供完整代码示例。
集合中存储JSON的常见方式
集合中存储JSON数据主要有两种形式:
- 存储JSON字符串:将JSON格式的数据(如
'{"name":"张三","age":18}')作为普通字符串存入集合(如List<String>)。 - 存储JSON对象:先将JSON字符串解析为Java对象(如通过
Jackson、Gson等库解析为Map或自定义实体类),再将对象存入集合(如List<Map<String, Object>>或List<User>)。
示例场景
假设我们需要存储多个用户的信息,用户数据以JSON格式提供,
{"name":"张三","age":18,"city":"北京"}
{"name":"李四","age":22,"city":"上海"}
我们可以选择:
- 方式1:将每个用户JSON字符串存入
List<String>。 - 方式2:将每个JSON字符串解析为
User对象或Map,存入List<User>或List<Map>。
将集合转换为JSON字符串
当我们需要将集合中的数据(无论是JSON字符串还是Java对象)转换为JSON格式输出时,可以使用以下方法:
使用Jackson库(推荐)
Jackson是Java中最流行的JSON处理库之一,支持高效的对象与JSON互转。
(1)添加依赖
在pom.xml中添加Jackson核心依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
(2)集合转JSON示例
场景1:List<String>(存储JSON字符串)转JSON数组
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;
import java.util.List;
public class ListToJsonString {
public static void main(String[] args) {
// 1. 准备List<String>,每个元素是JSON字符串
List<String> jsonList = Arrays.asList(
"{\"name\":\"张三\",\"age\":18}",
"{\"name\":\"李四\",\"age\":22}"
);
// 2. 创建ObjectMapper实例
ObjectMapper objectMapper = new ObjectMapper();
try {
// 3. 将List<String>转换为JSON数组字符串
String jsonArray = objectMapper.writeValueAsString(jsonList);
System.out.println("JSON数组: " + jsonArray);
// 输出: JSON数组: ["{\"name\":\"张三\",\"age\":18}","{\"name\":\"李四\",\"age\":22}"]
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
场景2:List<Map>(存储JSON对象)转JSON数组
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ListMapToJson {
public static void main(String[] args) {
// 1. 准备List<Map>,每个Map对应一个JSON对象
List<Map<String, Object>> userList = new ArrayList<>();
Map<String, Object> user1 = new HashMap<>();
user1.put("name", "张三");
user1.put("age", 18);
userList.add(user1);
Map<String, Object> user2 = new HashMap<>();
user2.put("name", "李四");
user2.put("age", 22);
userList.add(user2);
// 2. 创建ObjectMapper实例
ObjectMapper objectMapper = new ObjectMapper();
try {
// 3. 将List<Map>转换为JSON数组字符串
String jsonArray = objectMapper.writeValueAsString(userList);
System.out.println("JSON数组: " + jsonArray);
// 输出: JSON数组: [{"name":"张三","age":18},{"name":"李四","age":22}]
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
场景3:List<自定义对象>转JSON数组
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.List;
// 自定义User类
class User {
private String name;
private int age;
// 无参构造器(Jackson需要)
public User() {}
// 有参构造器
public User(String name, int age) {
this.name = name;
this.age = age;
}
// Getter和Setter(Jackson需要)
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
public class ListObjectToJson {
public static void main(String[] args) {
// 1. 准备List<User>
List<User> userList = new ArrayList<>();
userList.add(new User("张三", 18));
userList.add(new User("李四", 22));
// 2. 创建ObjectMapper实例
ObjectMapper objectMapper = new ObjectMapper();
try {
// 3. 将List<User>转换为JSON数组字符串
String jsonArray = objectMapper.writeValueAsString(userList);
System.out.println("JSON数组: " + jsonArray);
// 输出: JSON数组: [{"name":"张三","age":18},{"name":"李四","age":22}]
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
使用Gson库(替代方案)
Gson是Google提供的JSON处理库,使用方式与Jackson类似。
(1)添加依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
(2)示例代码
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ListToJsonWithGson {
public static void main(String[] args) {
// 1. 准备List<Map>
List<Map<String, Object>> userList = new ArrayList<>();
Map<String, Object> user1 = new HashMap<>();
user1.put("name", "张三");
user1.put("age", 18);
userList.add(user1);
Map<String, Object> user2 = new HashMap<>();
user2.put("name", "李四");
user2.put("age", 22);
userList.add(user2);
// 2. 创建Gson实例
Gson gson = new Gson();
// 3. 转换为JSON字符串
String jsonArray = gson.toJson(userList);
System.out.println("JSON数组: " + jsonArray);
// 输出: JSON数组: [{"name":"张三","age":18},{"name":"李四","age":22}]
}
}
将JSON字符串解析为集合
当我们需要将JSON字符串(如API返回的JSON数组)存入集合时,可以使用以下方法:
使用Jackson库
(1)JSON数组字符串转List<Map>
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.Map;
public class JsonToListMap {
public static void main(String[] args) {
// 1. 准备JSON数组字符串
String jsonArray = "[" +
"{\"name\":\"张三\",\"age\":18}," +
"{\"name\":\"李四\",\"age\":22}" +
"]";
// 2. 创建ObjectMapper实例
ObjectMapper objectMapper = new ObjectMapper();
try {
// 3. 使用TypeReference指定集合类型(避免类型擦除)
List<Map<String, Object>> userList = objectMapper.readValue(
jsonArray,
new TypeReference<List<Map<String, Object>>>() {}
);
// 4. 输出结果
userList.forEach(user -> System.out.println(user));
// 输出:
// {name=张三, age=18}
// {name=李四, age=22}
} catch (Exception e) {
e.printStackTrace();
}
}
}



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