具体使用哪种方法,取决于你想要转换成的对象的类型以及字符串的格式。

下面我将按照不同的场景,为你详细介绍几种最主流和最实用的方法。
字符串转 JSON 对象(最常用)
如果你的字符串是 JSON 格式,并且你想将其转换成一个 Java 对象(一个自定义的类实例、Map 或 List),那么使用 JSON 库是最佳选择。
使用 Jackson (推荐)
Jackson 是目前最流行、性能最好的 JSON 处理库。
第一步:添加 Jackson 依赖

如果你使用 Maven,在 pom.xml 中添加:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version> <!-- 使用最新版本 -->
</dependency>
第二步:创建一个与 JSON 结构匹配的 Java 类 (POJO)
// User.java
public class User {
private String name;
private int age;
private String email;
// 必须有无参构造函数
public User() {
}
// 推荐:使用 getter 和 setter
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 String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
// 可选:重写 toString() 方便打印
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", email='" + email + '\'' +
'}';
}
}
第三步:进行转换
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) {
String jsonString = "{\"name\":\"张三\",\"age\":30,\"email\":\"zhangsan@example.com\"}";
// 创建 ObjectMapper 实例
ObjectMapper objectMapper = new ObjectMapper();
try {
// 将 JSON 字符串转换为 User 对象
User user = objectMapper.readValue(jsonString, User.class);
// 打印结果
System.out.println(user);
System.out.println("用户名: " + user.getName());
} catch (JsonProcessingException e) {
System.err.println("JSON 解析失败: " + e.getMessage());
e.printStackTrace();
}
}
}
转换其他 JSON 类型

-
转
Map:// 将 JSON 字符串转为 Map<String, Object> Map<String, Object> dataMap = objectMapper.readValue(jsonString, new TypeReference<Map<String, Object>>() {}); System.out.println(dataMap.get("name")); // 输出: 张三 -
转
List:String jsonArrayString = "[{\"name\":\"李四\",\"age\":25}, {\"name\":\"王五\",\"age\":28}]"; // 将 JSON 数组字符串转为 List<User> List<User> userList = objectMapper.readValue(jsonArrayString, new TypeReference<List<User>>() {}); System.out.println(userList.get(0).getName()); // 输出: 李四
使用 Gson (Google 的库)
Gson 是另一个非常流行的 JSON 库,使用方式与 Jackson 类似。
第一步:添加 Gson 依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version> <!-- 使用最新版本 -->
</dependency>
第二步:转换
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class Main {
public static void main(String[] args) {
String jsonString = "{\"name\":\"张三\",\"age\":30,\"email\":\"zhangsan@example.com\"}";
Gson gson = new Gson();
// 转换为 User 对象
User user = gson.fromJson(jsonString, User.class);
System.out.println(user);
// 转换为 Map
Map<String, Object> dataMap = gson.fromJson(jsonString, new TypeToken<Map<String, Object>>() {}.getType());
System.out.println(dataMap.get("name"));
}
}
字符串转 XML 对象
如果你的字符串是 XML 格式,你可以使用 JAXB (Java Architecture for XML Binding) 或第三方库如 Dom4J。
使用 JAXB (JDK 内置,JDK 8 及以下需要单独安装)
JAXB 是 Java 标准库的一部分,非常适合处理 XML 和 Java 对象的绑定。
第一步:创建 Java 类并添加注解
import javax.xml.bind.annotation.*;
@XmlRootElement(name = "user") // 对应 XML 的根元素
@XmlAccessorType(XmlAccessType.FIELD) // 指定注解可以放在字段上
public class User {
@XmlElement(name = "name") // 对应 XML 的元素名
private String name;
@XmlElement(name = "age")
private int age;
@XmlElement(name = "email")
private String email;
// 必须有无参构造函数
public User() {
}
// getter 和 setter...
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", email='" + email + '\'' +
'}';
}
}
第二步:进行转换
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
public class Main {
public static void main(String[] args) {
String xmlString = "<user><name>李四</name><age>35</age><email>lisi@example.com</email></user>";
try {
// 1. 创建 JAXBContext,传入需要转换的类
JAXBContext jaxbContext = JAXBContext.newInstance(User.class);
// 2. 创建 Unmarshaller(反序列化器)
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
// 3. 将 XML 字符串转换为 User 对象
User user = (User) unmarshaller.unmarshal(new StringReader(xmlString));
// 4. 打印结果
System.out.println(user);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
字符串转 Java 内置类型
对于一些简单的 Java 内置类型,可以直接使用其包装类的 parseXxx() 方法或 valueOf() 方法。
| 目标类型 | 方法示例 | 备注 |
|---|---|---|
int |
int num = Integer.parseInt("123"); |
如果字符串格式不正确(如 "abc"),会抛出 NumberFormatException。 |
Integer |
Integer num = Integer.valueOf("123"); |
valueOf 会返回一个缓存的对象,parseInt 返回基本类型 int。 |
long |
long num = Long.parseLong("123456789"); |
同样可能抛出 NumberFormatException。 |
double |
double num = Double.parseDouble("3.14"); |
同样可能抛出 NumberFormatException。 |
boolean |
boolean flag = Boolean.parseBoolean("true"); |
对大小写不敏感,"true", "TRUE", "1" 都会返回 true。 |
Date |
Date date = new SimpleDateFormat("yyyy-MM-dd").parse("2025-10-27"); |
需要指定日期格式,线程不安全,推荐使用 java.time 包下的类。 |
示例:
public class Main {
public static void main(String[] args) {
String strNum = "100";
int num = Integer.parseInt(strNum);
System.out.println(num + 10); // 输出 110
String strBool = "true";
boolean isActive = Boolean.parseBoolean(strBool);
System.out.println(isActive); // 输出 true
}
}
字符串转自定义对象(无特定格式)
如果字符串是一个自定义的、非标准格式("name:张三;age:30"),你需要手动编写解析逻辑。
方法:
- 使用
String.split()方法分割字符串。 - 使用
String.substring(),String.indexOf()等方法提取子串。 - 将提取出的子串用上述方法(如
Integer.parseInt)转换成相应的数据类型,并赋值给对象的字段。
示例:
public class Main {
public static void main(String[] args) {
String customString = "name:张三;age:30;email:zhangsan@example.com";
User user = new User();
String[] parts = customString.split(";");
for (String part : parts) {
String[] keyValue = part.split(":");
if (keyValue.length == 2) {
String key = keyValue[0];
String value = keyValue[1];
switch (key) {
case "name":
user.setName(value);
break;
case "age":
user.setAge(Integer.parseInt(value));
break;
case "email":
user.setEmail(value);
break;
}
}
}
System.out.println(user);
}
}
总结与选择建议
| 字符串格式 | 目标对象类型 | 推荐方法 | 优点 | 缺点 |
|---|---|---|---|---|
| JSON | 任何 Java 对象 | Jackson / Gson | 功能强大、灵活、性能好、生态成熟 | 需要引入第三方库 |
| XML | 任何 Java 对象 | JAXB | Java 标准(JDK 7+),无需额外库 | 注解侵入性强,配置略显繁琐 |
| CSV / 自定义分隔符 | List 或自定义对象 |
OpenCSV / 手动解析 | OpenCSV 功能强大,能处理复杂CSV | 手动解析代码量多,易出错 |
| 简单键值对 | Map |
String.split() |
简单直接 | 不适合复杂结构 |
| Java 内置类型 | int, long, Date 等 |
parseXxx() / valueOf() |
标准库方法,无需依赖 | 只能处理简单类型,格式要求严格 |
| 无特定格式 | 自定义对象 | 手动解析 | 灵活性最高 | 代码冗长,维护成本高,容易出错 |
核心建议:
- 优先使用标准格式:尽量让数据以 JSON 或 XML 的格式进行存储和传输。
- 首选 Jackson:在处理 JSON 时,Jackson 是事实上的标准,性能和功能都非常出色。
- 处理异常:所有解析操作都可能失败(如格式错误),务必使用
try-catch块来捕获ParseException,JsonProcessingException等异常,保证程序的健壮性。 - 为 POJO 提供无参构造函数:几乎所有的反序列化库(Jackson, Gson, JAXB)都要求目标类有一个公共的无参构造函数。
