java 自定义数据结构 转json_java对象与json字串相互转化

本文通过Jackson框架展示了如何将Java自定义数据结构(如Student和Class类)转换为JSON字符串,并反之进行对象转换。示例中详细演示了使用ObjectMapper的writeValueAsString和readValue方法进行转换的过程。
摘要由CSDN通过智能技术生成

简介:

Jackson是一个流行的基于Java的JSON处理框架

学习参考:

本篇简介如何使用Jackson进行Java对象与JSON的互相转换

新建基本Student类:

Java代码  spinner.gif

packagecom.jingshou.pojo;

importjava.util.Date;

publicclassStudent {

privateintid;

privateString name;

privateDate birthDay;

publicintgetId() {

returnid;

}

publicvoidsetId(intid) {

this.id = id;

}

publicString getName() {

returnname;

}

publicvoidsetName(String name) {

this.name = name;

}

publicDate getBirthDay() {

returnbirthDay;

}

publicvoidsetBirthDay(Date birthDay) {

this.birthDay = birthDay;

}

@Override

publicString toString() {

return"Student [birthDay="+ birthDay +", id="+ id +", name="

+ name + "]";

}

}

班级类:

Java代码  spinner.gif

packagecom.jingshou.pojo;

importjava.util.List;

publicclassClass {

privateString cname;

privateList members;

publicString getCname() {

returncname;

}

publicvoidsetCname(String cname) {

this.cname = cname;

}

publicList getMembers() {

returnmembers;

}

publicvoidsetMembers(List members) {

this.members = members;

}

publicString toString(){

return"The Class Name is: "+ cname +" "+"The members are: "+ members;

}

}

测试代码:

Java代码  spinner.gif

packagecom.jingshou.jackson;

importjava.io.IOException;

importjava.util.ArrayList;

importjava.util.Date;

importjava.util.List;

importcom.fasterxml.jackson.databind.ObjectMapper;

importcom.jingshou.pojo.Class;

importcom.jingshou.pojo.Student;

publicclassJacksonTest1 {

publicstaticvoidmain(String[] args)throwsIOException {

Student student1 = newStudent();

student1.setId(5237);

student1.setName("jingshou");

student1.setBirthDay(newDate());

ObjectMapper mapper = newObjectMapper();

// Convert object to JSON string

String Json =  mapper.writeValueAsString(student1);

System.out.println("Change Object to JSON String: "+ Json);

// Convert Json string to Object

Student student2 = mapper.readValue(Json, Student.class);

System.out.println(student2);

// Create a student list add it to Bj

Student student3 = newStudent();

student3.setId(5117);

student3.setName("saiya");

student3.setBirthDay(newDate());

List stuList = newArrayList();

stuList.add(student1);

stuList.add(student3);

Class bj = newClass();

bj.setCname("五年二班");

bj.setMembers(stuList);

String json2 = mapper.writeValueAsString(bj);

System.out.println("The JSON from Class is: "+ json2);

Class bj2 = mapper.readValue(json2, Class.class);

System.out.println(bj2);

}

}

运行结果:

Text代码  spinner.gif

Change Object to JSON String: {"id":5237,"name":"jingshou","birthDay":1389513906622}

Student [birthDay=Sun Jan 1216:05:06CST2014, id=5237, name=jingshou]

The JSON from Class is: {"cname":"五年二班","members":[{"id":5237,"name":"jingshou","birthDay":1389513906622},{"id":5117,"name":"saiya","birthDay":1389513906859}]}

The Class Name is: 五年二班 The members are: [Student [birthDay=Sun Jan 1216:05:06CST2014, id=5237, name=jingshou], Student [birthDay=Sun Jan1216:05:06CST2014, id=5117, name=saiya]]

Change Object to JSON String: {"id":5237,"name":"jingshou","birthDay":1389513906622}

Student [birthDay=Sun Jan 12 16:05:06 CST 2014, id=5237, name=jingshou]

The JSON from Class is: {"cname":"五年二班","members":[{"id":5237,"name":"jingshou","birthDay":1389513906622},{"id":5117,"name":"saiya","birthDay":1389513906859}]}

The Class Name is: 五年二班 The members are: [Student [birthDay=Sun Jan 12 16:05:06 CST 2014, id=5237, name=jingshou], Student [birthDay=Sun Jan 12 16:05:06 CST 2014, id=5117, name=saiya]]

小结:

转换的关键就是ObjectMapper

在使用ObjectMapper对象readValue或者writeValue的时候,JSON可以以字符串的形式传入,也可以以文件的形式传入,官方的例子是让将JSON保存在文件中

明显JSON字串中的key与Java类中的field名字应该要相同

Student类如果有自定义构造函数的时候,进行JSON->对象转换会出错,接下去再研究这个问题..

Date域是以long类型输出的,有必要的话,需要进行格式转换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值