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

哪里有建设网站的七牛云最新消息

哪里有建设网站的,七牛云最新消息,wordpress密文,水源logo设计制作网在实际开发中,我们经常需要处理复杂的对象,这些对象可能包含基本字段、嵌套对象、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://www.dtcms.com/wzjs/792846.html

相关文章:

  • aspcms网站地图生成wordpress默认后台密码
  • 一键免费建立网站全国最有实力的信息网络公司排名
  • 电商设计网站哪个好wordpress 模板添加
  • 企业网站源码 vue郑州网站建设公司排行
  • 做兼职的设计网站wordpress 禁用响应
  • 做磨毛布内销哪个网站比较好wordpress图挂了
  • 湖南建设银行官网网站首页网站百度搜索情况和反链接优化建议
  • 重庆网站制作权威乐云践新中山网站建设制作 .超凡科技
  • 深圳网站备案拍照点新手网络推广怎么干
  • 建站网址是多少国外对旅游网站建设的现状
  • 任何网站都可以做谷歌推广的吗长沙感染人数最新消息
  • 孝昌县专注网站建设代理桂林人论坛
  • 旅游网--个人网站建设 论文网站动态图片如何做
  • 飞飞cms悠悠电影网站阿里云 备案 网站服务内容
  • 安阳网站推广西安制作网站公司哪家好
  • 做网站宁夏百度友情链接
  • 如何解决网站兼容性问题能用网站做微信小程序
  • 四川seo整站优化集团网站制作方案ppt
  • 网站建设的人性分析亚洲国产中文域名查询
  • 网站设计酷站个人与企业签订网站开发合同
  • 怎么做合买彩票网站网站开发从入门到实战
  • wordpress 整站带数据网站建设软文模板
  • 网站安全备案如何注册网站卖东西
  • 重庆网站建设套餐微企申请网站
  • 网页设计与网站建设考试wordpress文章页面500
  • 北京网站建设交易做传销网站后果严重吗
  • 如何在网站中做二级下拉菜单mt4网站建设
  • 网站建设 天津广州涉疫重点场所有更新
  • 门户网站设计特点二级域名查询
  • 专业的网站开发app开发公司入