Jsonlib实现Json字符串和Java对象的互相转换
2015-10-29 14:38
771 查看
版本:json-lib-2.2.3.jar
User:
输出结果:
package com.zzj.jsonlib; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONObject; import com.zzj.jsonlib.user.Address; import com.zzj.jsonlib.user.Order; public class JsonTest { public static void main(String[] args) { User user = new User(); user.setUsername("zhangsan"); user.setPassword("123"); Address address = new Address(); address.setState("Guangdong"); address.setCity("Shenzhen"); user.setAddress(address); List<Order> orders = new ArrayList<Order>(); for (int i = 0; i < 2; i++) { Order order = new Order(); order.setOrderId("orderId_" + i); order.setStatus("status_" + i); orders.add(order); } user.setOrders(orders); // 对象转Json字符串 System.out.println("-----序列化-----"); String jsonStr = bean2JsonStr(user); System.out.println(jsonStr); // Json字符串转对象 System.out.println("-----反序列化-----"); String jsonStr2 = "{\"Id\":\"123\",\"address\":{\"city\":\"Shenzhen\",\"state\":\"Guangdong\"}," + "\"orders\":[{\"orderId\":\"orderId_0\",\"status\":\"status_0\"}," + "{\"orderId\":\"orderId_1\",\"status\":\"status_1\"}]," + "\"password\":\"123\",\"username\":\"zhangsan\"}"; Map<String, Class<?>> classes = new HashMap<String, Class<?>>(); classes.put("orders", Order.class); User user2 = (User) jsonStr2Bean(jsonStr2, User.class, classes); System.out.println(user2); } static Object jsonStr2Bean(String jsonStr, Class<?> clazz) { return jsonStr2Bean(jsonStr, clazz, null); } /** * * @param jsonStr * @param clazz * @param classes 集合字段类型 * @return */ static Object jsonStr2Bean(String jsonStr, Class<?> clazz, Map<String, Class<?>> classes){ JSONObject jsonObject = JSONObject.fromObject(jsonStr); return JSONObject.toBean(jsonObject, clazz, classes); } static String bean2JsonStr(Object object){ JSONObject jsonObject = JSONObject.fromObject(object); return jsonObject.toString(); } }
User:
package com.zzj.jsonlib; import java.util.List; import com.zzj.jsonlib.user.Address; import com.zzj.jsonlib.user.Order; public class User { private String username; private String password; private Address address; private List<Order> orders; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public List<Order> getOrders() { return orders; } public void setOrders(List<Order> orders) { this.orders = orders; } @Override public String toString() { return "User [address=" + address + ", orders=" + orders + ", password=" + password + ", username=" + username + "]"; } }Order:
package com.zzj.jsonlib.user; public class Order { private String orderId; private String status; public String getOrderId() { return orderId; } public void setOrderId(String orderId) { this.orderId = orderId; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } @Override public String toString() { return "Order [orderId=" + orderId + ", status=" + status + "]"; } }Address:
package com.zzj.jsonlib.user; public class Address { private String state; private String city; public String getState() { return state; } public void setState(String state) { this.state = state; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } @Override public String toString() { return "Address [city=" + city + ", state=" + state + "]"; } }
输出结果:
-----序列化----- {"address":{"city":"Shenzhen","state":"Guangdong"},"orders":[{"orderId":"orderId_0","status":"status_0"},{"orderId":"orderId_1","status":"status_1"}],"password":"123","username":"zhangsan"} -----反序列化----- [framework] 2015-10-29 14:38:02,609 - net.sf.json.JSONObject -0 [main] WARN net.sf.json.JSONObject - Tried to assign property Id:java.lang.String to bean of class com.zzj.jsonlib.User User [address=Address [city=Shenzhen, state=Guangdong], orders=[Order [orderId=orderId_0, status=status_0], Order [orderId=orderId_1, status=status_1]], password=123, username=zhangsan]在反序列化时,Json字符串有冗余,但是并没有抛出异常,只是输出了警告。这种冗余指的是简单属性冗余,如果有复杂属性冗余(例如User中没有定义Address),则会抛出错误Unknown property 'Address'。
相关文章推荐
- Struts的常用ognl表达式
- JDK,JRE,JVM区别与联系
- java读取配置文件中的每一行并遍历
- java性能优化的地方
- Maven搭建hadoop环境报Missing artifact jdk.tools:jdk.tools:jar:1.8
- Exception in thread "main" java.lang.Error: Unresolved compilation problem
- java web项目启动加载顺序之web.xml部分
- Idea反向生成JavaBean
- Maven打包报java.lang.OutOfMemoryError
- java学习_File简单的txt读取写入
- Spring学习1--基本概念
- Eclipse几个版本号的区别
- Java NIO.2 —— 文件或目录移动操作
- java.lang.IllegalStateException: No host
- Eclipse SVN E200007: Commit failed (details follow) 解决方法
- Java Config 下的Spring Test方式
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- eclipse的 ctrl + 1 在idea中的 快捷键 alt + shift + l
- Java多线程,并发编程等
- Java 随机数