json对象和java对象的相互转换方法(json-lib、jackson、fastjson、gson)

傷城~ 2022-07-19 00:27 273阅读 0赞

一 使用json-lib包下的JSONObject和JSONArray转换

代码如下:

  1. package com.test.test;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.cn.entity.User;
  5. import net.sf.json.JSONArray;
  6. import net.sf.json.JSONObject;
  7. /**
  8. * JSONObject和JSONArray
  9. * @author sun.kai
  10. * 2016年8月7日
  11. */
  12. public class TestJsonOne {
  13. public static void main(String[] args){
  14. long time1 = System.currentTimeMillis();
  15. // Map<String, Object> param = new HashMap<String,Object>();
  16. // param.put("id", 1);
  17. // param.put("userName", "admin管理员");
  18. // param.put("password", "admin123456");
  19. // param.put("age", 25);
  20. // JSONObject jsonObject = JSONObject.fromObject(param);
  21. // System.out.println(jsonObject);
  22. // JSONArray jsonArray = JSONArray.fromObject(param);
  23. // System.out.println(jsonArray);
  24. List<User> list = new ArrayList<User>();
  25. User user1 = new User();
  26. user1.setId(1);
  27. user1.setUserName("admin管理员");
  28. user1.setPassword("admin123456");
  29. user1.setAge(25);
  30. testJsonObject(user1);
  31. list.add(user1);
  32. User user2 = new User();
  33. user2.setId(2);
  34. user2.setUserName("海角七号");
  35. user2.setPassword("海角七号123456");
  36. user2.setAge(26);
  37. list.add(user2);
  38. testJsonArray(list);
  39. long time2 = System.currentTimeMillis();
  40. System.out.println(time2-time1);
  41. }
  42. @SuppressWarnings("static-access")
  43. public static void testJsonObject(User user){
  44. System.out.println("JSONObject测试");
  45. /*
  46. * java对象转换成json对象
  47. */
  48. JSONObject jsonObject1 = JSONObject.fromObject(user);
  49. /*
  50. * json对象转成字符串
  51. */
  52. String jsonsString1 = jsonObject1.toString();
  53. System.out.println(jsonObject1);
  54. System.out.println(jsonsString1);
  55. String jsonString2 = "{\"age\":25,\"id\":1,\"password\":\"admin123456\",\"userName\":\"admin管理员\"}";
  56. /*
  57. * 字符串转成json对象
  58. */
  59. JSONObject jsonObject2 = JSONObject.fromObject(jsonString2);
  60. /*
  61. * json对象转成java对象
  62. */
  63. User user2 = (User) jsonObject2.toBean(jsonObject2,User.class);
  64. System.out.println(user2.getUserName());
  65. /*
  66. * 获取json对象中的json对象数组
  67. */
  68. String jsonString3 = "{\"abc\":[{\"age\":25,\"id\":1,\"password\":\"admin123456\",\"userName\":\"admin管理员\"},"
  69. + "{\"age\":26,\"id\":2,\"password\":\"海角七号123456\",\"userName\":\"海角七号\"}"
  70. + "]}";
  71. //字符串转成json对象
  72. JSONObject jsonObject3 = JSONObject.fromObject(jsonString3);
  73. //获取json对象中的json对象数组
  74. JSONArray jsonArray = jsonObject3.getJSONArray("abc");
  75. System.out.println(jsonArray.toString());
  76. }
  77. @SuppressWarnings("unchecked")
  78. public static void testJsonArray(List<User> userList){
  79. System.out.println("JSONArray测试");
  80. /*
  81. * java对象列表转换为json对象数组
  82. */
  83. JSONArray jsonArray1 = JSONArray.fromObject(userList);
  84. /*
  85. * json对象数组转成字符串
  86. */
  87. String arrayString1 = jsonArray1.toString();
  88. System.out.println(jsonArray1);
  89. System.out.println(arrayString1);
  90. String arrayString2 = "[{\"age\":25,\"id\":1,\"password\":\"admin123456\",\"userName\":\"admin管理员\"},{\"age\":26,\"id\":2,\"password\":\"海角七号123456\",\"userName\":\"海角七号\"}]";
  91. /*
  92. * 字符串转成json对象数组
  93. */
  94. JSONArray jsonArray2 = JSONArray.fromObject(arrayString2);
  95. /*
  96. * json对象数组转成java对象
  97. */
  98. List<User> users = (List<User>) JSONArray.toCollection(jsonArray2, User.class);
  99. for(User user : users){
  100. System.out.println(user.getUserName());
  101. }
  102. /*
  103. * 循环json对象数组,获取json对象
  104. */
  105. for(int i = 0;i<jsonArray2.size();i++){
  106. JSONObject jsonObject = jsonArray2.getJSONObject(i);
  107. System.out.println(jsonObject);
  108. }
  109. }
  110. }

User实体类代码:

  1. package com.cn.entity;
  2. import java.io.Serializable;
  3. public class User implements Serializable{
  4. private static final long serialVersionUID = -154635138564326678L;
  5. private Integer id;
  6. private String userName;
  7. private String password;
  8. private Integer age;
  9. public Integer getId() {
  10. return id;
  11. }
  12. public void setId(Integer id) {
  13. this.id = id;
  14. }
  15. public String getUserName() {
  16. return userName;
  17. }
  18. public void setUserName(String userName) {
  19. this.userName = userName == null ? null : userName.trim();
  20. }
  21. public String getPassword() {
  22. return password;
  23. }
  24. public void setPassword(String password) {
  25. this.password = password == null ? null : password.trim();
  26. }
  27. public Integer getAge() {
  28. return age;
  29. }
  30. public void setAge(Integer age) {
  31. this.age = age;
  32. }
  33. }

执行后的结果:

JSONObject测试
{“age”:25,”id”:1,”password”:”admin123456”,”userName”:”admin管理员”}
{“age”:25,”id”:1,”password”:”admin123456”,”userName”:”admin管理员”}
admin管理员
[{“age”:25,”id”:1,”password”:”admin123456”,”userName”:”admin管理员”},{“age”:26,”id”:2,”password”:”海角七号123456”,”userName”:”海角七号”}]
JSONArray测试
[{“age”:25,”id”:1,”password”:”admin123456”,”userName”:”admin管理员”},{“age”:26,”id”:2,”password”:”海角七号123456”,”userName”:”海角七号”}]
[{“age”:25,”id”:1,”password”:”admin123456”,”userName”:”admin管理员”},{“age”:26,”id”:2,”password”:”海角七号123456”,”userName”:”海角七号”}]
admin管理员
海角七号
{“age”:25,”id”:1,”password”:”admin123456”,”userName”:”admin管理员”}
{“age”:26,”id”:2,”password”:”海角七号123456”,”userName”:”海角七号”}
686

二 使用jackson-databind包下的ObjectMapper

代码如下:

  1. package com.test.test;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.List;
  6. import com.cn.entity.User;
  7. import com.fasterxml.jackson.core.JsonProcessingException;
  8. import com.fasterxml.jackson.databind.ObjectMapper;
  9. /**
  10. * jackson是spring mvc内置的json转换工具
  11. * @author sun.kai
  12. * 2016年8月7日
  13. */
  14. public class TestJsonTwo {
  15. public static void main(String[] args) throws JsonProcessingException{
  16. long time1 = System.currentTimeMillis();
  17. List<User> users = new ArrayList<User>();
  18. User user1 = new User();
  19. user1.setId(1);
  20. user1.setUserName("admin管理员");
  21. user1.setPassword("admin123456");
  22. user1.setAge(25);
  23. users.add(user1);
  24. User user2 = new User();
  25. user2.setId(2);
  26. user2.setUserName("海角七号");
  27. user2.setPassword("海角七号123456");
  28. user2.setAge(26);
  29. users.add(user2);
  30. try {
  31. testObjectMapper(users);
  32. } catch (IOException e) {
  33. e.printStackTrace();
  34. }
  35. long time2 = System.currentTimeMillis();
  36. System.out.println(time2-time1);
  37. }
  38. public static void testObjectMapper(List<User> users) throws IOException{
  39. ObjectMapper mapper = new ObjectMapper();
  40. /*
  41. * java对象是一个集合
  42. * 转成的字符串是json对象数组
  43. */
  44. String mapperString1 = mapper.writeValueAsString(users);
  45. System.out.println(mapperString1);
  46. /*
  47. * java对象不是一个集合
  48. * 转成json对象字符串
  49. */
  50. String mapperString2 = mapper.writeValueAsString(users.get(0));
  51. System.out.println(mapperString2);
  52. /*
  53. * json对象数组字符串转java对象集合
  54. */
  55. String jsonString1 = "[{\"age\":25,\"id\":1,\"password\":\"admin123456\",\"userName\":\"admin管理员\"},{\"age\":26,\"id\":2,\"password\":\"海角七号123456\",\"userName\":\"海角七号\"}]";
  56. User[] userArray = mapper.readValue(jsonString1, User[].class);
  57. List<User> userList = Arrays.asList(userArray);
  58. for (User user : userList) {
  59. System.out.println(user.getUserName());
  60. }
  61. /*
  62. * json对象字符串转java对象
  63. */
  64. String jsonString2 = "{\"age\":25,\"id\":1,\"password\":\"admin123456\",\"userName\":\"admin管理员\"}";
  65. User user = mapper.readValue(jsonString2, User.class);
  66. System.out.println(user.getUserName());
  67. }
  68. }

执行后的结果:

[{“id”:1,”userName”:”admin管理员”,”password”:”admin123456”,”age”:25},{“id”:2,”userName”:”海角七号”,”password”:”海角七号123456”,”age”:26}]
{“id”:1,”userName”:”admin管理员”,”password”:”admin123456”,”age”:25}
admin管理员
海角七号
admin管理员
784

三 使用fastjson

代码如下:

  1. package com.test.test;
  2. import com.cn.entity.User;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Map;
  6. import com.alibaba.fastjson.JSON;
  7. import com.alibaba.fastjson.TypeReference;
  8. /**
  9. * fastjson是阿里做的国有开源Java工具包
  10. * @author sun.kai
  11. * 2016年8月7日
  12. */
  13. public class TestJsonThree {
  14. public static void main(String[] args){
  15. long time1 = System.currentTimeMillis();
  16. List<User> users = new ArrayList<User>();
  17. User user1 = new User();
  18. user1.setId(1);
  19. user1.setUserName("admin管理员");
  20. user1.setPassword("admin123456");
  21. user1.setAge(25);
  22. users.add(user1);
  23. User user2 = new User();
  24. user2.setId(2);
  25. user2.setUserName("海角七号");
  26. user2.setPassword("海角七号123456");
  27. user2.setAge(26);
  28. users.add(user2);
  29. testFastjson(users);
  30. long time2 = System.currentTimeMillis();
  31. System.out.println(time2-time1);
  32. }
  33. @SuppressWarnings("unchecked")
  34. public static void testFastjson(List<User> users){
  35. /*
  36. * java对象是一个集合
  37. * 转成的字符串是json对象数组
  38. */
  39. String fastjsonString1 = JSON.toJSONString(users);
  40. System.out.println(fastjsonString1);
  41. /*
  42. * java对象不是一个集合
  43. * 转成json对象字符串
  44. */
  45. String fastjsonString2 = JSON.toJSONString(users.get(0));
  46. System.out.println(fastjsonString2);
  47. /*
  48. * json对象数组字符串转java对象集合
  49. */
  50. String jsonString1 = "[{\"age\":25,\"id\":1,\"password\":\"admin123456\",\"userName\":\"admin管理员\"},{\"age\":26,\"id\":2,\"password\":\"海角七号123456\",\"userName\":\"海角七号\"}]";
  51. List<User> userList = JSON.parseArray(jsonString1, User.class);
  52. for (User user : userList) {
  53. System.out.println(user.getUserName());
  54. }
  55. /*
  56. * json对象数组字符串转Map集合
  57. */
  58. List<Map<String, Object>> maps = JSON.parseObject(jsonString1,new TypeReference<List<Map<String,Object>>>(){});
  59. System.out.println(maps);
  60. for (Map<String, Object> map : maps) {
  61. System.out.println(map.get("userName"));
  62. }
  63. /*
  64. * json对象字符串转java对象
  65. */
  66. String jsonString2 = "{\"age\":25,\"id\":1,\"password\":\"admin123456\",\"userName\":\"admin管理员\"}";
  67. User user = JSON.parseObject(jsonString2, User.class);
  68. System.out.println(user.getUserName());
  69. /*
  70. * json对象字符串转Map
  71. */
  72. Map<String, Object> map = JSON.parseObject(jsonString2, Map.class);
  73. System.out.println(map);
  74. System.out.println(map.get("userName"));
  75. }
  76. }

执行结果:

[{“age”:25,”id”:1,”password”:”admin123456”,”userName”:”admin管理员”},{“age”:26,”id”:2,”password”:”海角七号123456”,”userName”:”海角七号”}]
{“age”:25,”id”:1,”password”:”admin123456”,”userName”:”admin管理员”}
admin管理员
海角七号
[{id=1, age=25, userName=admin管理员, password=admin123456}, {id=2, age=26, userName=海角七号, password=海角七号123456}]
admin管理员
海角七号
admin管理员
{id=1, age=25, userName=admin管理员, password=admin123456}
admin管理员
338

四 使用Google的Gson

代码如下:

  1. package com.test.test;
  2. import com.cn.entity.User;
  3. import com.google.gson.Gson;
  4. import com.google.gson.reflect.TypeToken;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import java.util.Map;
  8. /**
  9. * google的gson
  10. * https://mvnrepository.com/artifact/com.google.code.gson/gson
  11. * @author sun.kai
  12. * 2016年8月7日
  13. */
  14. public class TestJsonFour {
  15. public static void main(String[] args){
  16. long time1 = System.currentTimeMillis();
  17. List<User> users = new ArrayList<User>();
  18. User user1 = new User();
  19. user1.setId(1);
  20. user1.setUserName("admin管理员");
  21. user1.setPassword("admin123456");
  22. user1.setAge(25);
  23. users.add(user1);
  24. User user2 = new User();
  25. user2.setId(2);
  26. user2.setUserName("海角七号");
  27. user2.setPassword("海角七号123456");
  28. user2.setAge(26);
  29. users.add(user2);
  30. testGson(users);
  31. long time2 = System.currentTimeMillis();
  32. System.out.println(time2-time1);
  33. }
  34. @SuppressWarnings("unchecked")
  35. public static void testGson(List<User> users){
  36. /*
  37. * 创建Gson对象
  38. */
  39. Gson gson = new Gson();
  40. /*
  41. * 获得泛型参数的类型
  42. */
  43. java.lang.reflect.Type type = new TypeToken<List<User>>() {}.getType();
  44. /*
  45. * java对象是一个集合
  46. * 转成的字符串是json对象数组
  47. */
  48. String gsonString1 = gson.toJson(users);
  49. System.out.println(gsonString1);
  50. /*
  51. * java对象不是一个集合
  52. * 转成json对象字符串
  53. */
  54. String gsonString2 = gson.toJson(users.get(0));
  55. System.out.println(gsonString2);
  56. /*
  57. * json对象数组字符串转java对象集合
  58. */
  59. String jsonString1 = "[{\"age\":25,\"id\":1,\"password\":\"admin123456\",\"userName\":\"admin管理员\"},{\"age\":26,\"id\":2,\"password\":\"海角七号123456\",\"userName\":\"海角七号\"}]";
  60. List<User> userList = gson.fromJson(jsonString1, type);
  61. for (User user : userList) {
  62. System.out.println(user.getUserName());
  63. }
  64. /*
  65. * json对象数组字符串转Map集合
  66. */
  67. List<Map<String, Object>> maps = gson.fromJson(jsonString1,new TypeToken<List<Map<String, Object>>>() {}.getType());
  68. System.out.println(maps);
  69. for (Map<String, Object> map : maps) {
  70. System.out.println(map.get("userName"));
  71. }
  72. /*
  73. * json对象字符串转java对象
  74. */
  75. String jsonString2 = "{\"age\":25,\"id\":1,\"password\":\"admin123456\",\"userName\":\"admin管理员\"}";
  76. User user = gson.fromJson(jsonString2, User.class);
  77. System.out.println(user.getUserName());
  78. /*
  79. * json对象字符串转Map
  80. */
  81. Map<String, Object> map = gson.fromJson(jsonString2, Map.class);
  82. System.out.println(map);
  83. System.out.println(map.get("userName"));
  84. }
  85. }

执行结果:

[{“id”:1,”userName”:”admin管理员”,”password”:”admin123456”,”age”:25},{“id”:2,”userName”:”海角七号”,”password”:”海角七号123456”,”age”:26}]
{“id”:1,”userName”:”admin管理员”,”password”:”admin123456”,”age”:25}
admin管理员
海角七号
[{age=25.0, id=1.0, password=admin123456, userName=admin管理员}, {age=26.0, id=2.0, password=海角七号123456, userName=海角七号}]
admin管理员
海角七号
admin管理员
{age=25.0, id=1.0, password=admin123456, userName=admin管理员}
admin管理员
336

发表评论

表情:
评论列表 (有 0 条评论,273人围观)

还没有评论,来说两句吧...

相关阅读