当前位置:首页 > 后端开发 > 正文

json怎么写java

Java中,可以使用JSON库如Jackson或Gson来处理JSON数据,使用Jackson库将 Java对象转换为JSON字符串:,“`java,ObjectMapper mapper = new ObjectMapper();,String json = mapper.writeValueAsString(yourObject);

Java中处理JSON数据,主要涉及到将Java对象转换为JSON字符串(序列化)以及将JSON字符串转换为Java对象(反序列化),以下是如何在Java中编写和处理JSON数据的详细指南。

选择合适的JSON库

Java本身并不提供内置的JSON处理功能,因此我们需要借助第三方库,最常用的JSON库包括:

库名 特点 适用场景
Gson Google开发,API简单易用,支持注解和自定义序列化/反序列化。 快速上手,适合中小型项目。
Jackson 功能强大,性能优秀,支持流式解析和树模型,与Spring生态集成良好。 大型项目或对性能要求较高的场景。
Fastjson 阿里巴巴开源,速度快,支持本地化特性(如日期格式)。 对性能要求高且需要本地化支持的场景。
JSON.simple 轻量级,API简单,适合简单JSON处理。 仅需基础功能且依赖较少的场景。

使用Gson处理JSON

添加Gson依赖

如果使用Maven,可以在pom.xml中添加以下依赖:

<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency>

创建Java对象

假设我们有一个Person类:

将Java对象转换为JSON字符串

import com.google.gson.Gson; public class Main { public static void main(String[] args) { Person person = new Person("张三", 30, "zhangsan@example.com"); Gson gson = new Gson(); String jsonString = gson.toJson(person); System.out.println(jsonString); // 输出: {"name":"张三","age":30,"email":"zhangsan@example.com"} } }

格式化输出

为了让JSON字符串更易读,可以使用GsonBuilder进行格式化:

import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class Main { public static void main(String[] args) { Person person = new Person("张三", 30, "zhangsan@example.com"); Gson gson = new GsonBuilder().setPrettyPrinting().create(); String jsonString = gson.toJson(person); System.out.println(jsonString); // 输出: // { // "name": "张三", // "age": 30, // "email": "zhangsan@example.com" // } } }

处理Null值

默认情况下,Gson会忽略值为null的字段,如果希望保留null值,可以配置serializeNulls():

Gson gson = new GsonBuilder().serializeNulls().create();

自定义序列化策略

自定义日期格式:

处理嵌套对象和集合

import java.util.List; class Address { private String street; private String city; // 构造方法、Getter和Setter } class Person { private String name; private int age; private Address address; private List<String> hobbies; // 构造方法、Getter和Setter } // 使用示例 Address address = new Address("123 Main St", "Anytown"); List<String> hobbies = List.of("Reading", "Hiking"); Person person = new Person("Charlie", 40, address, hobbies); String json = gson.toJson(person); System.out.println(json); // 输出: {"name":"Charlie","age":40,"address":{"street":"123 Main St","city":"Anytown"},"hobbies":["Reading","Hiking"]}

使用Jackson处理JSON

添加Jackson依赖

如果使用Maven,可以在pom.xml中添加以下依赖:

<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency>

将Java对象转换为JSON字符串

import com.fasterxml.jackson.databind.ObjectMapper; public class Main { public static void main(String[] args) throws Exception { Person person = new Person("张三", 30, "zhangsan@example.com"); ObjectMapper mapper = new ObjectMapper(); String jsonString = mapper.writeValueAsString(person); System.out.println(jsonString); // 输出: {"name":"张三","age":30,"email":"zhangsan@example.com"} } }

格式化输出

mapper.writerWithDefaultPrettyPrinter().writeValueAsString(person);

处理Null值

Jackson默认会忽略null值,但可以通过配置改变:

mapper.getFactory().getConfig().with(DeserializationFeature.FAIL_ON_NULL_CREATORS).with(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

自定义序列化策略

自定义日期格式:

import com.fasterxml.jackson.annotation.JsonFormat; import java.util.Date; public class Person { @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") private Date birthday; // 其他字段和方法 }

处理嵌套对象和集合

Jackson会自动处理嵌套对象和集合,无需额外操作。

使用Fastjson处理JSON

添加Fastjson依赖

如果使用Maven,可以在pom.xml中添加以下依赖:

<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency>

将Java对象转换为JSON字符串

import com.alibaba.fastjson.JSON; public class Main { public static void main(String[] args) { Person person = new Person("张三", 30, "zhangsan@example.com"); String jsonString = JSON.toJSONString(person); System.out.println(jsonString); // 输出: {"name":"张三","age":30,"email":"zhangsan@example.com"} } }

格式化输出

String jsonString = JSON.toJSONString(person, true); // 第二个参数为true表示格式化输出

处理Null值

Fastjson默认会保留null值,如果不需要可以配置:

JSON.toJSONString(person, SerializerFeature.WriteMapNullValue);

自定义序列化策略

自定义日期格式:

import com.alibaba.fastjson.serializer.SerializeConfig; import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer; import java.util.Date; import java.text.SimpleDateFormat; import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.support.config.FastJsonConfig; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.

0