GSON学习总结
来源:互联网 发布:淘宝改评价怎么说 编辑:程序博客网 时间:2024/06/05 05:12
Gson是Google提供的用来在java对象和JSON数据之间进行映射的Java类库,可以将一个JSON字符串转成一个Java对象,或者反过来。
GSON生成JSON数据
Gson可以直接调用toJson的类方法,传入一个Bean生成对应的JSON字符串,在对应的字段上面加 @SerizlizedName(“n”)可以指定生成的JSON字符串中对应的键名。
@SerializedName(“NAME”) 注解,obj转JSON之后属性变成大写
Gson依赖
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.4</version></dependency>
Gson 可以用注解的方式实现 列名转化:@SerializedName(“key的字符串”);
eg: public class Diaosi { @SerializedName("Name") private String name; @SerializedName("School") private String school; @SerializedName("Has_girlfriend") private boolean has_girlfriend; @SerializedName("Age") private double age; @SerializedName("Car") private Object car; @SerializedName("House") private Object house; @SerializedName("Major") private String[] major; @SerializedName("Comment") private String comment; @SerializedName("Birthday") private String birthday;}
利用Gson创建JSON数据
Gson gson=new Gson();System.out.println(gson.toJson(传Javabean对象));
改为
GsonBuilder g=new GsonBuilder();g.setPrettyPrinting();Gson gson=g.create();System.out.println(gson.toJson(wangxiaoer));
**注意:**private transient String ignore; transient修饰类里面的对象,在生成JSON对象的时候,不会发布出去。
重点:
Gson 可以使用注解灵活改变列名(构造函数)
Gson 可以使用transient隐藏不显示列名:javaBean中列属性private后面添加 transiant
eg:private transient String ignore;
Gson 可以使用GsonBuilder进行json美化工作
eg:GsonBuilder gsonBuilder=new GsonBuilder(); gsonBuilder.setPrettyPrinting();
Gson 可以使用setFieldNamingStrategy(new FieldNamingStrategy){ 使用回调函数,设置json输出格式}
eg: gsonBuilder.setFieldNamingStrategy(new FieldNamingStrategy() { public String translateName(Field f) { // TODO 自动生成的方法存根 if(f.getName().equals("name")) return "Name"; return f.getName(); } }); Gson gson=gsonBuilder.create(); System.out.println(gson.toJson(wangxiaoer));
使用gson创建json还可以使用GsonBuider对象,首先实例化GsonBuilder,然后调用setPrettyPrinting()方法对使用这个对象的json样式排版处理,或还有其他方法,然后再调用这个对象的create()方法创建一个Gson对象。
生成json串的时候,有时需要个性化的设置.使用GsonBulder的
GsonBuilder.setFieldNamingStrategy(fieldNamingStrategy(){//重写translateName方法public translateName(Field F){if(f.getName().equals("name")){return "NAME"; //这个操作是: 如果遇到的是小写的name,则转换成大写的name}//否则原样输出return f.getName();}})
GSON解析
在java获取json数据,首先把json文件实例化为file对象,然后用file的工具类的静态方法转换成字符串,如FileUtils.readFileToString(file),然后实例化Gson对象,再调用fromJson方法解析json。
JSONObject可以将*.json文件解析成一个它的对象;Gson可以正向的生成,也可以解析成自己定义的一个JavaBean的对象
public class GsonReadSample { public static void main(String[] args) throws IOException { File file=new File(ReadJSONSample.class.getResource("/wangxiaoer.json").getFile()); String content=FileUtils.readFileToString(file); Gson gson=new Gson(); Diaosi wangxiaoer=gson.fromJson(content, Diaosi.class); System.out.println(wangxiaoer); }}
注意:如果Gson对Json数据进行反解析
Gson gson=new Gson();//将Json数据反解析为JavaBean对象DiaoSi ds=gson.fromJson(content,DiaoSi.class);
Gson解析json文件中的json串: gson.fromJson(json串文件,实体类.class);
gson的反解析:JavaBean和.json中的属性名要一致,否则返回为空。
JSONObject可以将*.json文件解析成一个它的对象,Gson可以正向的生成,也可以解析成自己定义的一个JavaBean的对象
GSON解析 带日期转换
Gson对Date格式处理并不好,可以通过GsonBuilder().setDateFormat(“yyyy-MM-dd”).create()设定date格式
Gson 带有日期转化的功能
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();DiaosiWithBirthday wangxiaoer = gson.from(content,DiaosiWithBirthday.class);//DiaosiWithBirthday的属性是java.util.Date的类型System.out.println(wangxiaoer.getBirthDay().toLocalString());
格式:gson.fromJson(“json串文件”,对应的实体类.class);
集合类的解析:在实际开发中,一般用集合类来代替数组,数组用得较少
Gson可以将json文件中的其他类型的数据,比如日期、数组等直接转换成java属性的集合类对象
Gson的优点:
(1)支持日期
(2)可以转换为对象
(3)集合操作
eg:private List<String> major;private Set<String> major;System.out.println(wangxiaoer.getMajor());System.out.println(wangxiaoer.getMajor().getClass());
GSON解析数组可以和集合无缝对接。
总结:
1.json数据是以键值对形式存储的,键值只能是string类型,value值可以是string.数组.boolean
2.JsonObject只能实现对象转成json字符串,不支持字符串转成对象,这是一大缺陷
3.谷歌提供的Gson功能就更加强大,不仅可以实现字符串和对象的相互转换,而且还能定制json字符串中的属性,包括忽略某些属性,修改属性名称等
功能:映射Java Object与json格式数据
1:通过Annotation注解来声明
2:支持自定义属性名称
3:支撑包含或排除属性
4:支持自定义接口自己完成解析/生成过程
注意:
Json-java库是使用反射库的Method获取信息来构建json;而Gson是使用反射类的Filed信息来构建json的。Json适用于移动端Android SDK,Gson适用于移动端开发
参考视频:http://www.imooc.com/learn/523
- GSON学习总结
- GSON学习总结
- gson总结
- gson 学习
- Gson学习
- GSON 学习
- Gson学习
- Gson学习
- GSON学习
- Json&Gson学习总结(一)---Json和Gson区别与联系及其使用
- gson解析json(总结)
- Gson 源码分析 总结
- Gson 源码分析 总结
- Gson基础用法总结
- Gson使用总结
- Gson使用总结
- Gson使用总结
- Gson使用总结
- python问题unindent does not match any outer indentation level在pycharm平台的解决方法
- BaseRecyclerViewAdapterHelper源码解读(七) 多布局
- c++新建线程
- MySQL:创建用户并授权
- 友盟推送点击通知栏不执行UmengNotificationClickHandler方法
- GSON学习总结
- 初识 ubuntun
- mysql中index和key的区别
- TabLayout使用
- mysql的坑
- 数据库原理
- 从点对中构建二叉树,并查找两个节点所对应的最小公共祖先
- bzoj1598 [Usaco2008 Mar]牛跑步 ( 启发式搜索 A*算法 )
- bzoj1801 [Ahoi2009]chess 中国象棋 DP