java的gson方法_Gson的基本使用

GSON:谷歌的一款开源项目,主要用于解析json数据,有很多很友好的个性化设置

思想:把json字符串与java对象相关联

序列化:把java对象转换成json字符串

反序列化:把json字符串转换成java对象

使用springMVC获取web前端传送过来的数据

Gson处理简单数据(key对应的value是简单的String类型/或者number)

主要的方法:

例如:

前端传送如下json字符串:

{

"username":"kylin",

"password":"123456"

}

//那么controller中就可以有如下的操作(User类的内容就不导入)

@RequestMapping(value = "/LOGIN",method =RequestMethod.POST)publicString LOGIN(@RequestBody String jsonStr){//使用gson来获取数据并且进行操作 Gson gson=newGson();//序列化 User user=gson.fromJson(jsonStr,User.class); String username=user.getUsername(); String password=user.getPassword(); System.out.println(username+" "+password);return "welcome"; }

Gson处理复杂数据(key对应的value可能是数组/对象)

处理方式:

如果是对象的话,那么对应的javabean类,需要设置一个公有的内部类对象,如果是数组的话,那么对应的javabean类中可以把对应的字段设置为list集合/set集合

例如:

前端传送数据如下:

{"name":"kylin","age":20,"major":["English","Chinese","math"],"grade":{"course":"computer","score":"100","level":"good"} }

对应的Student类:

Student.java

packagecom.kylin.JavaBean;importjava.util.List;public classStudent {privateString name; //名字private intage; //年纪private Listmajor; //主修课程privateGrade grade; //某科目publicString getName() {returnname; }public voidsetName(String name) {this.name =name; }public intgetAge() {returnage; }public void setAge(intage) {this.age =age; }public ListgetMajor() {returnmajor; }public void setMajor(Listmajor) {this.major =major; }publicGrade getGrade() {returngrade; }public voidsetGrade(Grade grade) {this.grade =grade; }   //注意:内部类应该被设置为publicpublic classGrade {privateString course;privateString score;privateString level;publicString getCourse() {returncourse; }public voidsetCourse(String course) {this.course =course; }publicString getScore() {returnscore; }public voidsetScore(String score) {this.score =score; }publicString getLevel() {returnlevel; }public voidsetLevel(String level) {this.level =level; } } }

Controller中请求处理方法:

@RequestMapping(value = "/Student",method =RequestMethod.POST)publicString Student_Login(@RequestBody String jsonStr){//jsonstr获取数据 /*{     "name":"kylin",      "age":20,     "major":["English","Chinese","math"],      "grade":{          "course":"computer",          "score":"100",          "level":"good"       }     } **/ //因为本地已经有想匹配的javabean对象,所有直接当成简单的数据获取就 Gson gson=newGson(); Student student=gson.fromJson(jsonStr,Student.class);//成功获取数组里面的内容 List major=student.getMajor();for(String i:major){ System.out.println(i); }//接下来就是解析内部类中的内容 /*Outter outter = new Outter(); Outter.Inner inner = outter.new Inner(); //必须通过Outter对象来创建*/ //成功获取grade对象 Student.Grade grade=student.newGrade(); grade=student.getGrade(); String gradeCourse=grade.getCourse(); String gradeLevel=grade.getLevel(); String gradeScore=grade.getScore(); System.out.println("内部的东西"+gradeScore+gradeCourse+gradeLevel);return "welcome"; //welcome是一个jsp文件,配置了视图解析器的,不需要过多的纠结 }

以上是从web前端获取json数据----简单数据,复杂数据(含有数组/对象)的处理方式;下面将介绍如何从web后端传送符合规范的json字符串给前端。

后端返回简单数据给前端------过于简单这里就不介绍了,主要介绍后端返回复杂json数据给前端的方法

后端返回复杂json字符串给前端

方式:使用javabean/使用map集合

使用javabean方式

@RequestMapping(value = "/DataBackByJavaBean",method = RequestMethod.POST)

@ResponseBody

public String DataBack(@RequestParam String id){

//本来是需要获取前端传过来的id,然后进行数据库查询 然后再返回结果 这里就随便的进行一次获取吧

System.out.println("前端传过来的id:"+id);

//设置需要传送的数据

Student student=new Student();

student.setName("kylin");

student.setAge(11);

List major=new ArrayList<>();

major.add("Chinese");

major.add("Math");

student.setMajor(major);

Student.Grade grade=student.new Grade();

grade.setCourse("XXX");

grade.setScore("111");

grade.setLevel("good");

student.setGrade(grade);

//数据设置完毕 进行gson操作-----变成json字符串

//使用GsonBuilder创建的gson对象会更加的强大,可以有更多的个性化操作

GsonBuilder gsonBuilder=new GsonBuilder();

Gson gson=gsonBuilder.create();

String jsonStr=gson.toJson(student);

System.out.println(jsonStr);

return jsonStr;

}

使用map集合方式(优点:对于需要返回的数据可以任意设置,不用局限于只能使用javabean的属性)

@RequestMapping(value = "/DataBackByMap",method =RequestMethod.POST) @ResponseBodypublicString DataBackByMap(@RequestParam String id){ System.out.println(id);//使用map方式来处理 Mapparams=new HashMap<>(); params.put("status","200"); params.put("name","kylin"); List major=new LinkedList<>(); major.add("XXX"); major.add("YYY"); params.put("major",major); Student student=newStudent(); Student.Grade grade=student.newGrade(); grade.setLevel("GOOD"); grade.setScore("1111"); grade.setCourse("xxxxxxssss"); params.put("grade",grade);//转换成jsonStr字符串 GsonBuilder gsonBuilder = newGsonBuilder(); gsonBuilder.setFieldNamingStrategy(newFieldNamingStrategy() { @OverridepublicString translateName(Field field) {if (field.getName().equals("name")){return "NAME"; }returnfield.getName(); } }); Gson gson=gsonBuilder.create(); gson.toJson() String jsonStr=gson.toJson(params); System.out.println(params);returnjsonStr; }

下面主要扩展性的讲解一下Gson的一些其他特性:

原文:https://www.cnblogs.com/shan-kylin/p/9225331.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值