Java实现Json字符串与Object对象相互转换的方式总结

这篇文章主要介绍了Java实现Json字符串与Object对象相互转换的方式,结合实例形式总结分析了java基于Json-Lib、Org.Json、Jackson、Gson、FastJson五种方式转换json类型相关操作技巧,需要的朋友可以参考下

本文实例总结了Java实现Json字符串与Object对象相互转换的方式。分享给大家供大家参考,具体如下:

Json-Lib、Org.Json、Jackson、Gson、FastJson五种方式转换json类型

只列举了最省事的方式。不涉及复制情况和速度。

测试用例,一个User类,属性name,age,location。重写toString()。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

public class User {

  private String name;

  private Integer age;

  private String location;

  public User() {

  }

  public User(String name) {

    this.name = name;

  }

  public User(String name, Integer age) {

    this.name = name;

    this.age = age;

  }

  public User(String name, Integer age, String location) {

    this.name = name;

    this.age = age;

    this.location = location;

  }

  public String getName() {

    return name;

  }

  public void setName(String name) {

    this.name = name;

  }

  public Integer getAge() {

    return age;

  }

  public void setAge(Integer age) {

    this.age = age;

  }

  public String getLocation() {

    return location;

  }

  public void setLocation(String location) {

    this.location = location;

  }

  @Override

  public String toString() {

    return "User{" +

        "name='" + name + '\'' +

        ", age=" + age +

        ", location='" + location + '\'' +

        '}';

  }

}

1、Json-Lib

maven依赖如下,需注意<classifier>jdk15</classifier>,jar包区分jdk1.3和jdk1.5版本

1

2

3

4

5

6

<dependency>

 <groupId>net.sf.json-lib</groupId>

 <artifactId>json-lib</artifactId>

 <version>2.4</version>

 <classifier>jdk15</classifier>

</dependency>

测试demo

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

import net.sf.json.JSONObject;

public class JsonLibDemo {

  public static void main(String[] args) {

    //创建测试object

    User user = new User("李宁",24,"北京");

    System.out.println(user);

    //转成json字符串

    JSONObject jsonObject = JSONObject.fromObject(user);

    String json = jsonObject.toString();

    System.out.println(json);

    //json字符串转成对象

    JSONObject jsonObject1 = JSONObject.fromObject(json);

    User user1 = (User) JSONObject.toBean(jsonObject1,User.class);

    System.out.println(user1);

  }

}

2、org.json

maven依赖如下

1

2

3

4

5

<dependency>

 <groupId>org.json</groupId>

 <artifactId>json</artifactId>

 <version>20170516</version>

</dependency>

测试demo

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

import org.json.JSONObject;

public class OrgJsonDemo {

  public static void main(String[] args) {

    //创建测试object

    User user = new User("李宁",24,"北京");

    System.out.println(user);

    //转成json字符串

    String json = new JSONObject(user).toString();

    System.out.println(json);

    //json字符串转成对象

    JSONObject jsonObject = new JSONObject(json);

    String name = jsonObject.getString("name");

    Integer age = jsonObject.getInt("age");

    String location = jsonObject.getString("location");

    User user1 = new User(name,age,location);

    System.out.println(user1);

  }

}

3、Jackson

maven依赖

1

2

3

4

5

<dependency>

 <groupId>com.fasterxml.jackson.core</groupId>

 <artifactId>jackson-databind</artifactId>

 <version>2.9.0</version>

</dependency>

测试demo

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonDemo {

  public static void main(String[] args) {

    //创建测试object

    User user = new User("李宁",24,"北京");

    System.out.println(user);

    //转成json字符串

    ObjectMapper mapper = new ObjectMapper();

    try {

      String json = mapper.writeValueAsString(user);

      System.out.println(json);

      //json字符串转成对象

      User user1 = mapper.readValue(json,User.class);

      System.out.println(user1);

    } catch (java.io.IOException e) {

      e.printStackTrace();

    }

  }

}

4、Gson

maven依赖

1

2

3

4

5

<dependency>

 <groupId>com.google.code.gson</groupId>

 <artifactId>gson</artifactId>

 <version>2.8.1</version>

</dependency>

测试demo

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

import com.google.gson.Gson;

public class GsonDemo {

  public static void main(String[] args) {

    //创建测试object

    User user = new User("李宁",24,"北京");

    System.out.println(user);

    //转成json字符串

    Gson gson = new Gson();

    String json = gson.toJson(user);

    System.out.println(json);

    //json字符串转成对象

    User user1 = gson.fromJson(json,User.class);

    System.out.println(user1);

  }

}

5、FastJson

maven依赖

1

2

3

4

5

<dependency>

 <groupId>com.alibaba</groupId>

 <artifactId>fastjson</artifactId>

 <version>1.2.37</version>

</dependency>

测试demo

1

2

3

4

5

6

7

8

9

10

11

12

13

14

import com.alibaba.fastjson.JSON;

public class FastJsonDemo {

  public static void main(String[] args) {

    //创建测试object

    User user = new User("李宁",24,"北京");

    System.out.println(user);

    //转成json字符串

    String json = JSON.toJSON(user).toString();

    System.out.println(json);

    //json字符串转成对象

    User user1 = JSON.parseObject(json,User.class);

    System.out.println(user1);

  }

}

json-lib时间有些久远,jar包只更新到2010年

org.json用起来有些繁琐

Jackson、Gson、FastJson只需一两句话就可以搞定

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.json; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import net.sf.ezmorph.object.DateMorpher; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValueProcessor; import net.sf.json.util.CycleDetectionStrategy; import net.sf.json.util.JSONUtils; public class TestJsonServlet { /** * 从一个JSON 对象字符格式中得到一个java对象 * * @param jsonString * @param pojoCalss * @return */ @SuppressWarnings("unchecked") public static <T> T jsonToObject(String jsonString, Class<T> pojoCalss) { Object pojo; JSONObject jsonObject = JSONObject.fromObject(jsonString); pojo = JSONObject.toBean(jsonObject, pojoCalss); return (T) pojo; } /** * json字符串转换成集合 * * @param jsonString * @param pojoClass * @return */ @SuppressWarnings("unchecked") public static <T> List<T> jsonToList(String jsonString, Class<T> pojoClass) { JSONArray jsonArray = JSONArray.fromObject(jsonString); JSONObject jsonObject; Object pojoValue; List<T> list = new ArrayList<T>(); for (int i = 0; i < jsonArray.size(); i++) { jsonObject = jsonArray.getJSONObject(i); pojoValue = JSONObject.toBean(jsonObject, pojoClass); list.add((T) pojoValue); } return list; } /** * json字符串转换成集合 * * @param jsonString * @param pojoClass * @return */ @SuppressWarnings("unchecked") public static <T> List<T> jsonToList(String jsonString, Class<T> pojoClass, String dataFormat) { JsonConfig jsonConfig = configJson(dataFormat); JSONArray jsonArray = JSONArray.fromObject(jsonString, jsonConfig); JSONObject jsonObject; Object pojoValue; List<T> list = new ArrayList<T>(); for (int i = 0; i < jsonArray.size(); i++) { jsonObject = jsonArray.getJSONObject(i); pojoValue = JSONObject.toBean(jsonObject, pojoClass); list.add((T) pojoValue); } return list; } /** * 将java对象转换json字符串 * * @param javaObj * @return */ public static String objectToJson(Object javaObj) { JSONObject json; json = JSONObject.fromObject(javaObj); return json.toString(); } /** * 将java对象转换json字符串,并设定日期格式 * * @param javaObj * 要转换java对象 * @param dataFormat * 制定的日期格式 * @return */ public static String objectToJson(Object javaObj, String dataFormat) { JSONObject json; JsonConfig jsonConfig = configJson(dataFormat); json = JSONObject.fromObject(javaObj, jsonConfig); return json.toString(); } /** * list变成json * * @param list * @return */ public static <T> String listToJson(List<T> list) { JSONArray json; json = JSONArray.fromObject(list); return json.toString(); } /** * list变成json * * @param list * @return */ public static <T> String listToJson(List<T> list, String dataFormat) { JSONArray json; JsonConfig jsonConfig = configJson(dataFormat); json = JSONArray.fromObject(list, jsonConfig); return json.toString(); } /** * JSON 时间解析器 * * @param datePattern * @return */ public static JsonConfig configJson(final String datePattern) { JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] { datePattern })); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setIgnoreDefaultExcludes(false); jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); jsonConfig.registerJsonValueProcessor(Date.class, new JsonValueProcessor() { @Override public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) { if (value instanceof Date) { String str = new SimpleDateFormat(datePattern).format((Date) value); return str; } return value == null ? null : value.toString(); } @Override public Object processArrayValue(Object value, JsonConfig jsonConfig) { String[] obj = {}; if (value instanceof Date[]) { SimpleDateFormat sf = new SimpleDateFormat(datePattern); Date[] dates = (Date[]) value; obj = new String[dates.length]; for (int i = 0; i < dates.length; i++) { obj[i] = sf.format(dates[i]); } } return obj; } }); return jsonConfig; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值