在java编程中,json字符串和对象的相互转化十分常用,下面我们就对象如何转化为json字符串以及json字符串如何转化为对象进行简要介绍,以便在代码中能方便使用。

1、依赖


本次介绍的方法依赖jackson,这是非常通用的json工具。

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>

2、实体


下面我们编写一个稍微复杂的实体,以便进行测试。

package com.yefengyu.utils;

import java.util.Date;

public class Car
{
private Integer id; private String brand; private Date date; public Car()
{
} public Car(Integer id, String brand, Date date)
{
this.id = id;
this.brand = brand;
this.date = date;
} public Integer getId()
{
return id;
} public void setId(Integer id)
{
this.id = id;
} public String getBrand()
{
return brand;
} public void setBrand(String brand)
{
this.brand = brand;
} public Date getDate()
{
return date;
} public void setDate(Date date)
{
this.date = date;
} @Override
public String toString()
{
return "Car{" +
"id=" + id +
", brand='" + brand + '\'' +
", date=" + date +
'}';
}
}

上面编写了一个Car类,下面再编写一个Person类。

package com.yefengyu.utils;

public class Person
{
private Integer id; private String name; private String email; private Car car; public Person()
{
} public Person(Integer id, String name, String email, Car car)
{
this.id = id;
this.name = name;
this.email = email;
this.car = car;
} public Integer getId()
{
return id;
} public void setId(Integer id)
{
this.id = id;
} public String getName()
{
return name;
} public void setName(String name)
{
this.name = name;
} public String getEmail()
{
return email;
} public void setEmail(String email)
{
this.email = email;
} public Car getCar()
{
return car;
} public void setCar(Car car)
{
this.car = car;
} @Override
public String toString()
{
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
", car=" + car +
'}';
}
}

注意的是:必须有无参构造函数。若无则在字符串转为对象的时候:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.yefengyu.utils.Person` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (String)"{"id":1,"name":"yefengyu","email":"110@qq.com","car":{"id":1,"brand":"Rolls-Royce","date":"2019-06-22 13:25:30"}}"; line: 1, column: 2]

3、工具


下面的代码是一个工具类,实现了Json字符串到对象的相互转化过程。

package com.yefengyu.utils;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException;
import java.text.SimpleDateFormat; //使用final关键字防止继承
public final class JsonSerializer
{
private static final ObjectMapper MAPPER; static
{
MAPPER = new ObjectMapper();
MAPPER.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));//日期格式化
} private JsonSerializer()
{
//防止new对象
} //对象转化为json字符串
public static String toJson(Object object)
{
try
{
return MAPPER.writeValueAsString(object);
}
catch (JsonProcessingException e)
{
e.printStackTrace();
}
return null;
} //对象转化为json字符串,并格式化输出
public static String toPrettyJson(Object object)
{
try
{
return MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(object);
}
catch (JsonProcessingException e)
{
e.printStackTrace();
}
return null;
} //字符串转为单个对象
public static <T> T fromJson(String json, Class<T> clazz)
{
if (json == null || json.trim().isEmpty() || clazz == null)
{
return null;
} try
{
return MAPPER.readValue(json, clazz);
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
} //字符串转为对象,比如对象列表
public static <T> T fromJson(String json, TypeReference<T> typeReference)
{
if (json == null || json.trim().isEmpty() || typeReference == null)
{
return null;
} try
{
return MAPPER.readValue(json, typeReference);
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
}

4、测试


1、单个对象转化为json字符串

Car car = new Car(1,"Rolls-Royce",new Date());
Person person = new Person(1, "yefengyu", "110@qq.com", car);
System.out.println(JsonSerializer.toJson(person));
System.out.println(JsonSerializer.toPrettyJson(person));

结果为:

{"id":1,"name":"yefengyu","email":"110@qq.com","car":{"id":1,"brand":"Rolls-Royce","date":"2019-06-22 13:25:30"}}
{
"id" : 1,
"name" : "yefengyu",
"email" : "110@qq.com",
"car" : {
"id" : 1,
"brand" : "Rolls-Royce",
"date" : "2019-06-22 13:25:30"
}
}

2、集合对象转化为json字符串

Car car = new Car(1,"Rolls-Royce",new Date());

List<Person> personList = new ArrayList<>();

Person p1 = new Person(1, "yefengyu", "1@qq.com",car);
Person p2 = new Person(2, "yefengyu", "2@qq.com",car);
Person p3 = new Person(3, "yefengyu", "3@qq.com",car); personList.add(p1);
personList.add(p2);
personList.add(p3); System.out.println(JsonSerializer.toJson(personList));
System.out.println(JsonSerializer.toPrettyJson(personList));

结果为:

[{"id":1,"name":"yefengyu","email":"1@qq.com","car":{"id":1,"brand":"Rolls-Royce","date":"2019-06-22 13:33:10"}},{"id":2,"name":"yefengyu","email":"2@qq.com","car":{"id":1,"brand":"Rolls-Royce","date":"2019-06-22 13:33:10"}},{"id":3,"name":"yefengyu","email":"3@qq.com","car":{"id":1,"brand":"Rolls-Royce","date":"2019-06-22 13:33:10"}}]
[ {
"id" : 1,
"name" : "yefengyu",
"email" : "1@qq.com",
"car" : {
"id" : 1,
"brand" : "Rolls-Royce",
"date" : "2019-06-22 13:33:10"
}
}, {
"id" : 2,
"name" : "yefengyu",
"email" : "2@qq.com",
"car" : {
"id" : 1,
"brand" : "Rolls-Royce",
"date" : "2019-06-22 13:33:10"
}
}, {
"id" : 3,
"name" : "yefengyu",
"email" : "3@qq.com",
"car" : {
"id" : 1,
"brand" : "Rolls-Royce",
"date" : "2019-06-22 13:33:10"
}
} ]

3、字符串转为单个对象

String json = "{\"id\":1,\"name\":\"yefengyu\",\"email\":\"110@qq.com\",\"car\":{\"id\":1,\"brand\":\"Rolls-Royce\",\"date\":\"2019-06-22 13:25:30\"}}";
System.out.println(JsonSerializer.fromJson(json, Person.class));

结果如下:

Person{id=1, name='yefengyu', email='110@qq.com', car=Car{id=1, brand='Rolls-Royce', date=Sat Jun 22 13:25:30 CST 2019}}

4、字符串转为对象集合

String list = "[{\"id\":1,\"name\":\"yefengyu\",\"email\":\"1@qq.com\",\"car\":{\"id\":1,\"brand\":\"Rolls-Royce\",\"date\":\"2019-06-22 13:33:10\"}},{\"id\":2,\"name\":\"yefengyu\",\"email\":\"2@qq.com\",\"car\":{\"id\":1,\"brand\":\"Rolls-Royce\",\"date\":\"2019-06-22 13:33:10\"}},{\"id\":3,\"name\":\"yefengyu\",\"email\":\"3@qq.com\",\"car\":{\"id\":1,\"brand\":\"Rolls-Royce\",\"date\":\"2019-06-22 13:33:10\"}}]";
 
List<Person> persons = JsonSerializer.fromJson(list, new TypeReference<List<Person>>()
{
}); for (Person person : persons)
{
System.out.println(person);
}

结果如下:

Person{id=1, name='yefengyu', email='1@qq.com', car=Car{id=1, brand='Rolls-Royce', date=Sat Jun 22 13:33:10 CST 2019}}
Person{id=2, name='yefengyu', email='2@qq.com', car=Car{id=1, brand='Rolls-Royce', date=Sat Jun 22 13:33:10 CST 2019}}
Person{id=3, name='yefengyu', email='3@qq.com', car=Car{id=1, brand='Rolls-Royce', date=Sat Jun 22 13:33:10 CST 2019}}

对象与json字符串相互转化的更多相关文章

  1. 使用Google的Gson实现对象和json字符串之间的转换

    使用Google的Gson实现对象和json字符串之间的转换 需要gson.jar 1.JsonUtil.java package com.snail.json; import java.lang.r ...

  2. fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化

    fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化 在开发过程中,经常需要和前端交互数据,数据交互的格式都是JSON,在此过程中免不了json字符串 ...

  3. JavaScript中JSON对象和JSON字符串的相互转化

    一.JSON字符串转换为JSON对象 var str = '{"name":"cxh","sex":"man",&quo ...

  4. JS中JSON对象和JSON字符串的相互转化

    转:http://www.cnblogs.com/wbyp/p/7086318.html 一.JSON字符串转换为JSON对象 var str = '{"name":"c ...

  5. jQuery中json对象与json字符串互换

    json字符串转json对象:jQuery.parseJSON(jsonStr); json对象转json字符串:JSON.stringify(jsonObj); 根据“|”把字符串变成数组.spli ...

  6. 前端页面使用 Json对象与Json字符串之间的互相转换

    前言 在前端页面很多时候都会用到Json这种格式的数据,最近没有前端,后端的我也要什么都要搞,对于Json对象与Json字符串之间的转换终于摸清楚了几种方式,归纳如下! 一:Json对象转换为json ...

  7. Json对象与Json字符串互转(转载)

    一.jQuery插件支持的转换方式 1 $.paseJSON(jsonstr);//将json字符串转换为json对象 二.浏览器支持的转换方式(Firefox,Chrome,Opera,Safair ...

  8. [TypeScript] TypeScript对象转JSON字符串范例

    [TypeScript] TypeScript对象转JSON字符串范例 Playground http://tinyurl.com/njbrnrv Samples class DataTable { ...

  9. json对象和json字符串有啥区别啊

    json对象可以通过javascript存取属性!json对象装成json字符串经常用于前后台传输数据! 如果你在前台使用,那么Json对象可以通过xx.name来调用,如果是字符串,那么就是字符串了 ...

随机推荐

  1. 我心中的ASP.NET Core 新核心对象WebHost(一)

    以本系列文章向Fish 前辈的那篇我心中的ASP.NET 核心对象致敬.(虽然不知道前辈现在在干什么).一晃就6年过去了,那首 郝云 的<回到那一天>怎么唱来着? 时光一晃,你就三十了. ...

  2. 使用eclipse创建Spring Boot项目

    环境介绍 1.jdk1.8 2.eclipse 3.maven 3.5.0 创建项目 eclectic 左上角 file -> new -> maven project 出现下图默认就好, ...

  3. java的任务

    1.完善现有的日志记录系统,对异常进行处理和记录 2.基于需求实现账号信息录入接口

  4. 【转】SAP 各种记账凭证的更改&冲销

    一:更改 1,已经过帐的 FB02. 过完帐的允许更改的地方有限,只有凭证抬头文本,参照,分配,文本,原因代码等 2,预制凭证的更改. FBV2. 预制凭证可以更改的地方很多,只有凭证编码+公司代码+ ...

  5. Java EE会话技术Cookie和Session

    会话技术 一.定义 会话技术是帮助服务器记住客户端状态的(区分客户端的).将客户访问的信息存在本地的叫Cookie技术,存在服务器上的叫Session技术. 注意: 一次会话何时开始?从打开一个浏览器 ...

  6. 设置Oracle PL/SQL时间显示格式NLS_TIMESTAMP_FORMAT

    Oracle中TIMESTAMP时间的显示格式   Oracle数据库的时间字段我们通常是使用timestamp 格式,在未做设置前, 查询出来的数据类似于“27-1月 -08 12.04.35.87 ...

  7. 阿里云HPC助力新制造 | 上汽仿真计算云SSCC

    随着上汽集团与阿里云的合作开展,阿里云各项技术逐步深入到上汽汽车研发领域的核心业务实现落地.其中上海汽车集团股份有限公司乘用车分公司(以下简称上汽乘用车)与阿里云共建的仿真计算混合云就是新制造产业升级 ...

  8. BZOJ 5296: [Cqoi2018]破解D-H协议(BSGS)

    传送门 解题思路 \(BSGS\)裸题??要求的是\(g^a =A (mod\) \(p)\),设\(m\)为\(\sqrt p\),那么可以设\(a=i*m-j\),式子变成 \[ g^{i*m-j ...

  9. php7.0 新增运算符??

    ??是php7 新增符号 其作用近似于三目运算符 ?: 但存在着细微差别 比较示例代码如图:         $b = $a?$a:2; 三目运算 <=>     $e = $a??'ho ...

  10. HttpCanary——最强Android抓包工具!

    迎使用HttpCanary——最强Android抓包工具! HttpCanary是一款功能强大的HTTP/HTTPS/HTTP2网络包抓取和分析工具,你可以把他看成是移动端的Fiddler或者Char ...