当前位置: 首页 > wzjs >正文

顺德网站制作公司海城网站建设

顺德网站制作公司,海城网站建设,如何制作公司免费网站,常州网站建设套餐在实际开发中,我们经常需要处理复杂的对象,这些对象可能包含基本字段、嵌套对象、List、Map 等数据结构。以下是一个完整的工具类封装,支持复杂对象的序列化(对象转JSON)和反序列化(JSON转对象)…

在实际开发中,我们经常需要处理复杂的对象,这些对象可能包含基本字段、嵌套对象、List、Map 等数据结构。以下是一个完整的工具类封装,支持复杂对象的序列化(对象转JSON)和反序列化(JSON转对象),并处理常见的数据类型。

复杂对象与JSON转换工具类(基于Gson)

  1. 添加Gson依赖
    在 build.gradle 中添加Gson依赖:
复杂对象与JSON转换工具类(基于Gson)
2. 添加Gson依赖
在 build.gradle 中添加Gson依赖:
  1. 工具类实现
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;public class JsonUtil {private static final Gson gson = new GsonBuilder().setPrettyPrinting() // 格式化输出.serializeNulls()    // 序列化空值.create();/*** 将对象转换为JSON字符串** @param object 需要转换的对象* @return JSON字符串*/public static String toJson(Object object) {return gson.toJson(object);}/*** 将JSON字符串转换为对象** @param json  JSON字符串* @param clazz 目标对象的Class类型* @param <T>   目标对象的类型* @return 转换后的对象*/public static <T> T fromJson(String json, Class<T> clazz) {return gson.fromJson(json, clazz);}/*** 将JSON字符串转换为List对象** @param json  JSON字符串* @param clazz List中元素的Class类型* @param <T>   List中元素的类型* @return 转换后的List对象*/public static <T> List<T> fromJsonToList(String json, Class<T> clazz) {Type type = TypeToken.getParameterized(List.class, clazz).getType();return gson.fromJson(json, type);}/*** 将JSON字符串转换为Map对象** @param json JSON字符串* @return 转换后的Map对象*/public static <K, V> Map<K, V> fromJsonToMap(String json) {Type type = new TypeToken<Map<K, V>>() {}.getType();return gson.fromJson(json, type);}/*** 将对象转换为格式化的JSON字符串(便于阅读)** @param object 需要转换的对象* @return 格式化后的JSON字符串*/public static String toPrettyJson(Object object) {return gson.toJson(object);}
}
  1. 复杂对象示例
    3.1 定义数据模型
import java.util.List;
import java.util.Map;public class User {private String name;private int age;private String email;private Address address;          // 嵌套对象private List<String> hobbies;    // List字段private Map<String, String> metadata; // Map字段// 必须有无参构造函数public User() {}public User(String name, int age, String email, Address address, List<String> hobbies, Map<String, String> metadata) {this.name = name;this.age = age;this.email = email;this.address = address;this.hobbies = hobbies;this.metadata = metadata;}// 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;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}public List<String> getHobbies() {return hobbies;}public void setHobbies(List<String> hobbies) {this.hobbies = hobbies;}public Map<String, String> getMetadata() {return metadata;}public void setMetadata(Map<String, String> metadata) {this.metadata = metadata;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +", email='" + email + '\'' +", address=" + address +", hobbies=" + hobbies +", metadata=" + metadata +'}';}
}class Address {private String city;private String zipCode;// 必须有无参构造函数public Address() {}public Address(String city, String zipCode) {this.city = city;this.zipCode = zipCode;}// Getter和Setter方法public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getZipCode() {return zipCode;}public void setZipCode(String zipCode) {this.zipCode = zipCode;}@Overridepublic String toString() {return "Address{" +"city='" + city + '\'' +", zipCode='" + zipCode + '\'' +'}';}
}

3.2 对象转JSON

Address address = new Address("New York", "10001");
List<String> hobbies = Arrays.asList("Reading", "Traveling");
Map<String, String> metadata = new HashMap<>();
metadata.put("role", "admin");
metadata.put("department", "IT");User user = new User("John", 25, "john@example.com", address, hobbies, metadata);
String json = JsonUtil.toJson(user);
System.out.println(json);// 输出:
// {
//   "name": "John",
//   "age": 25,
//   "email": "john@example.com",
//   "address": {
//     "city": "New York",
//     "zipCode": "10001"
//   },
//   "hobbies": ["Reading", "Traveling"],
//   "metadata": {
//     "role": "admin",
//     "department": "IT"
//   }
// }

3.3 JSON转对象

String json = "{\"name\":\"John\",\"age\":25,\"email\":\"john@example.com\"," +"\"address\":{\"city\":\"New York\",\"zipCode\":\"10001\"}," +"\"hobbies\":[\"Reading\",\"Traveling\"]," +"\"metadata\":{\"role\":\"admin\",\"department\":\"IT\"}}";
User user = JsonUtil.fromJson(json, User.class);
System.out.println(user);// 输出:
// User{name='John', age=25, email='john@example.com', address=Address{city='New York', zipCode='10001'}, hobbies=[Reading, Traveling], metadata={role=admin, department=IT}}

3.4 JSON转List

String json = "[{\"name\":\"John\",\"age\":25,\"email\":\"john@example.com\"}," +"{\"name\":\"Alice\",\"age\":30,\"email\":\"alice@example.com\"}]";
List<User> userList = JsonUtil.fromJsonToList(json, User.class);
System.out.println(userList);// 输出:
// [User{name='John', age=25, email='john@example.com'}, User{name='Alice', age=30, email='alice@example.com'}]

3.5 JSON转Map

String json = "{\"role\":\"admin\",\"department\":\"IT\"}";
Map<String, String> metadata = JsonUtil.fromJsonToMap(json);
System.out.println(metadata);// 输出:
// {role=admin, department=IT}
  1. 扩展功能
    4.1 自定义序列化与反序列化
    如果需要处理复杂的数据类型(如日期、枚举等),可以通过 GsonBuilder 注册自定义的序列化器和反序列化器。
Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new DateSerializer()) // 自定义日期序列化.registerTypeAdapter(Date.class, new DateDeserializer()) // 自定义日期反序列化.create();

4.2 排除字段
使用 @Expose 注解控制字段的序列化和反序列化。

public class User {@Exposeprivate String name;@Expose(serialize = false) // 仅反序列化,不序列化private int age;private String email; // 不参与序列化和反序列化
}

4.3 处理空值
通过 GsonBuilder 配置是否序列化空值。

Gson gson = new GsonBuilder().serializeNulls() // 序列化空值.create();
  1. 总结
    通过封装基于Gson的工具类,可以轻松处理复杂对象的序列化和反序列化,包括:

基本字段。

嵌套对象。

List 和 Map 等集合类型。

该工具类适用于大多数Android开发场景,特别是与后端API交互时的数据解析和封装。如果需要更复杂的功能(如自定义序列化、排除字段等),可以通过 GsonBuilder 进一步扩展。


文章转载自:

http://Zj0RjueL.trfrL.cn
http://qCjPmhBy.trfrL.cn
http://qiJiz8YU.trfrL.cn
http://ZSVCG7f1.trfrL.cn
http://2C07vw6r.trfrL.cn
http://3dqnGxys.trfrL.cn
http://bHxb62kn.trfrL.cn
http://t96crl3F.trfrL.cn
http://1IeRi1xB.trfrL.cn
http://1yDPm5o0.trfrL.cn
http://LU9UEJn1.trfrL.cn
http://2al7GNc5.trfrL.cn
http://MEQE75Zr.trfrL.cn
http://C75hh3G8.trfrL.cn
http://20bPKmS7.trfrL.cn
http://IPxpEfMS.trfrL.cn
http://71yejQnZ.trfrL.cn
http://dWR0AiHW.trfrL.cn
http://SZ8S6G42.trfrL.cn
http://dFZssuWY.trfrL.cn
http://FeUsNfKX.trfrL.cn
http://8fXU8KSi.trfrL.cn
http://XuAeOcj7.trfrL.cn
http://FvbcYpR5.trfrL.cn
http://fYPxA10f.trfrL.cn
http://syYeCbcs.trfrL.cn
http://4RyGdDtO.trfrL.cn
http://sU5ISn5D.trfrL.cn
http://ZMCnK60o.trfrL.cn
http://FFudA15R.trfrL.cn
http://www.dtcms.com/wzjs/780628.html

相关文章:

  • 网站关键词选取方法自己建的网站也要注册域名吗
  • 鞋网站模版设计公司logo公司文化
  • 西安哪里可以做公司网站做指甲的网站
  • 无为县做互联网网站服装市场调研报告范文
  • 杭州酒店网站建设做游戏的网站
  • 保定手机网站建设专业网络营销外包公司
  • 网站每个月8g流量做网站要付哪些钱
  • 库尔勒网站建设广州网页设计公司招聘
  • 创网站多少钱网页制作英文
  • 襄阳住房和城乡建设局网站首页南昌企业建设网站开发
  • 常宁市建设局网站有什么做照片书的网站
  • 做logo好的网站微信公众号怎么做链接网站
  • 手机在线建站揭阳网站建设antnw
  • 网站淘宝客怎么做的建设银行网站调用支付源码
  • 网站如何做电脑销售seo外链优化方法
  • 网站开发费用无形资产网站推广大概需要多少钱
  • 主体备案与网站备案专业做微视频的网站
  • 中国建设银行官方网站下载域名申请的步骤包括
  • 可以做录音兼职的网站网页制作与设计的英文
  • cms网站后台模版wordpress设置视频图片不显示图片
  • 网易严选的网站建设多多卡起货网站建设
  • 深圳网站建设科技有限公司软件服务外包人才培养专业
  • 江苏网站推广公司哪家好项目网络图最早开始时间
  • 专业的网站设计师摄影 网站 模板
  • 网站程序安全管理莱芜车管所网站
  • 上海基础微网站开发网站建设盈利模式
  • 做logo的比赛网站南昌网站建设推广
  • 济南网站建设公司晟创未来网页制作和设计实验目的
  • 网站建设主要做什么网站建设 选择题
  • 做网站怎么买服务器吗网站建设公司怎么开拓业务