Gson使用方法之Databinding
2014-09-18 11:03
423 查看
Databinding
Google json提供了一些方法用于将json字符串转换为java对象,包括继承的java对象。Gson使用名字作为关键字将json的成员匹配为java的成员。有两种转换方法:
1. 实例化com.google.gson.Gson class,使用fromJson方法
public <T> T fromJson(JsonElement json, Type typeOfT);
2. 使用com.google.gson.GsonBuilder class,可以通过这个类来设定转换的参数和属性,然后得到Gson class进行转换
这篇教程中的json字符串来源于free music archive,其中包含了Albums class和Dataset class,每一个Dataset都是一个Album
先看一下Albums转换为json字符串的长相,定义一个Albums类
class Albums { public String title; public String message; public String[] errors = new String[]{}; public String total; public int total_pages; public int page; public String limit; } public class GsonTest { public static void main(String[] args) { Albums albums = new Albums(); albums.title = "Free Music Archive - Albums"; albums.message = ""; albums.total = "11259"; albums.total_pages = 2252; albums.page = 1; albums.limit = "5"; GsonBuilder builder = new GsonBuilder(); Gson gson = builder.create(); System.out.println(gson.toJson(albums)); } }
得到的json字符串
{"title":"Free Music Archive - Albums","message":"","errors":[],"total":"11259","total_pages":2252,"page":1,"limit":"5"}
定义Dataset类和AlbumImages类
class Dataset { public String album_id; public String album_title; } class AlbumImages { public String image_id; public String user_id; } Dataset dataset = new Dataset(); dataset.album_id = "7596"; dataset.album_title = "Album 1"; System.out.println(gson.toJson(dataset)); AlbumImages image = new AlbumImages(); image.image_id = "1"; System.out.println(gson.toJson(image));
得到的json字符串
{"album_id":"7596","album_title":"Album 1"} {"image_id":"1"}
在builder中设置在json字符串输出null
builder.serializeNulls();
{"album_id":"7596","album_title":"Album 1"} {"image_id":"1","user_id":null}
将在dataset中加入image的list,并且在albums中加入dataset的list
在builder中设置更pretty的输出格式
builder.setPrettyPrinting().serializeNulls();输出的结果为
{ "title": "Free Music Archive - Albums", "message": "", "errors": [], "total": "11259", "total_pages": 2252, "page": 1, "limit": "5", "datasets": [ { "album_id": "7596", "album_title": "Album 1", "images": [ { "image_id": "1", "user_id": null } ] } ] }
利用@SerializedName("name")在序列化时设定特定的名字,这里讲images改为album_images
@SerializedName("album_images") public List<AlbumImages> images = new ArrayList<AlbumImages>();
利用setFieldNamingStrategy()方法来修改序列化后的名字
builder.setFieldNamingStrategy(new FieldNamingStrategy() { @Override public String translateName(java.lang.reflect.Field f) { if (f.getName().equals("albumId")) return "album_id"; else return f.getName(); } });
完整的代码如下:
public class GsonTest {
public static void main(String[] args) {
Albums albums = new Albums();
albums.title = "Free Music Archive - Albums";
albums.message = "";
albums.total = "11259";
albums.total_pages = 2252;
albums.page = 1;
albums.limit = "5";
GsonBuilder builder = new GsonBuilder();
builder.setPrettyPrinting().serializeNulls();
builder.setFieldNamingStrategy(new FieldNamingStrategy() { @Override public String translateName(java.lang.reflect.Field f) { if (f.getName().equals("albumId")) return "album_id"; else return f.getName(); } });
Gson gson = builder.create();
for (int i = 0; i < 2; i++)
{
Dataset dataset = new Dataset();
dataset.album_id = Integer.toString(i*10+i);
dataset.album_title = "Album " + Integer.toString(i);
AlbumImages image = new AlbumImages();
image.image_id = "Image_" + Integer.toString(i);
dataset.images.add(image);
}
String json = gson.toJson(albums);
Albums albumsCopy = gson.fromJson(json, Albums.class);
System.out.println(albumsCopy.title);
System.out.println(albumsCopy.page);
System.out.println(albumsCopy.datasets.size());
}
}
原文中只是将java对象序列化,在反序列化时如果遇到arraylist,直接调用fromJson()是不行的,需要用到JsonArray这个类,详情见Gson使用方法之Serializing
list
原文: Java Gson
- Convert json to a java object
相关文章推荐
- 关于使用dataAdapter.acceptChanges( )方法更新dataSet和数据库的问题
- AspNetPager与Socut.Data使用方法
- MVC中使用entity framework(EF)出现“必须添加对程序集“System.Data.Entity”解决方法
- Delphi DataModule使用方法
- 【转】C51 中的 data idata bdata pdata xdata bit code 的使用方法
- Data Access Application Block(Enterprise Library 3.1)的下载以及使用方法介绍
- WPF使用 ObjectDataProvider 为方法作为绑定数据源
- asp.net开发有关DataFormatString的使用方法讲解
- asp.net mvc 2 简简单单做开发 使用DataContext扩展方法Find<TEntity>(TEntity obj) 遇到的问题
- [Windows Forms] : BindingSource使用模式 - Data Binding基础知识 (一)
- TextBox属性Text 中使用DataBinder.Eval(Container.DataItem, "VacationWork_order")的时候出错的解决方法
- Silverlight入门教程(五): 使用ListBox and DataBinding 组件显示列表数据-教程资料网 www.zhiweinet.com
- MVC中使用entity framework(EF)出现“必须添加对程序集“System.Data.Entity”解决方法
- [备忘]ASP.NET MVC中RouteData.GetRequiredString("key")方法和RouteData.DataTokens["key"]方法使用上的区别
- Silverlight + WCF使用Linq to SQL以及ADO.NET Entity Data Model更新数据库子表方法
- AspNetPager与Socut.Data使用方法
- delphi DataModule1 使用方法
- 在使用OracleDataAdapterFill(Dataset)方法时报错:指定的参数已超出有效值的范围
- MVC中使用entity framework(EF)出现“必须添加对程序集“System.Data.Entity”解决方法
- [Windows Forms] : BindingSource使用模式 - Data Binding基础知识 (二)