一、Json如下
{ "lbmember_hash": { "10.2.180.74:1300": { "protocol": "ANY", "opsState": "up", "ip": "10.2.180.74", "server": "10.2.180.74", "port": "1300" }, "10.2.181.160": { "protocol": "ANY", "opsState": "up", "ip": "10.2.181.160", "server": "10.2.181.160", "port": "1119" } } }
二、定义对应的Java Bean
/** * */ package com.ebay.tools.cms.sync.model.lb; /** * * LBMember ResourceId: ip:port * * @author Josh Wang(Sheng) * * @email swang6@ebay.com * */ public class LBMemberSource extends LBSource { private static final long serialVersionUID = -3579858609342297799L; private String memberName; // ip:port - resource id private String ip; private String opsState; private int port; private String protocol; private String server; private String label; public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public String getOpsState() { return opsState; } public void setOpsState(String opsState) { this.opsState = opsState; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getProtocol() { return protocol; } public void setProtocol(String protocol) { this.protocol = protocol; } public String getServer() { return server; } public void setServer(String server) { this.server = server; } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public String getMemberName() { return memberName; } public void setMemberName(String memberName) { this.memberName = memberName; } @Override public String toString() { return "LBMemberSource [memberName=" + memberName + ", ip=" + ip + ", opsState=" + opsState + ", port=" + port + ", protocol=" + protocol + ", server=" + server + ", label=" + label + "]"; } }
三、给出具体的转换类
/** * */ package com.ebay.tools.cms.sync.utils; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.Map; import com.ebay.tools.cms.sync.model.SyncSource; import com.ebay.tools.cms.sync.model.lb.LBMemberSource; import com.google.common.reflect.TypeToken; import com.google.gson.Gson; /** * @author Josh Wang(Sheng) * * @email swang6@ebay.com * */ public class GsonConverter<T extends SyncSource> { private Type genericType; public GsonConverter() { Type typeClass = getClass().getGenericSuperclass(); genericType = ((ParameterizedType) typeClass).getActualTypeArguments()[0]; } public static Map<String, String> json2Map(String jsonString) { Type type = new TypeToken<Map<String, String>>() { private static final long serialVersionUID = 1L;}.getType(); Gson gson = new Gson(); return gson.fromJson(jsonString, type); } public Map<String, Map<String, LBMemberSource>> json2Maps(String jsonString) { Type typeToken = buildTypeToken(genericType); Gson gson = new Gson(); return gson.fromJson(jsonString, typeToken); } private Type buildTypeToken(Type genericType) { Type typeToken = null; if (genericType.toString().endsWith(LBMemberSource.class.getSimpleName())) { typeToken = new TypeToken<Map<String, Map<String, LBMemberSource>>>() { private static final long serialVersionUID = 1L;}.getType(); } return typeToken; } }
四、为便于测试,写一个IOUtils来读取上面的json文本,从而避免在测试用例中麻烦的输入Json文本
/** * */ package com.ebay.tools.cms.sync.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; /** * @author Josh Wang(Sheng) * * @email swang6@ebay.com * */ public class IOUtils { public static String fileToString(String filePath) throws IOException { File file = new File(filePath); InputStream in = new FileInputStream(file); try { return org.apache.commons.io.IOUtils.toString(in); } finally { org.apache.commons.io.IOUtils.closeQuietly(in); } } }
五、最后给出测试类
/** * */ package com.ebay.tools.cms.sync.util; import java.io.IOException; import java.util.Map; import org.junit.Assert; import org.junit.Test; import com.ebay.tools.cms.sync.BaseTest; import com.ebay.tools.cms.sync.model.lb.LBMemberSource; import com.ebay.tools.cms.sync.utils.GsonConverter; import com.ebay.tools.cms.sync.utils.IOUtils; /** * @author Josh Wang(Sheng) * * @email swang6@ebay.com * */ public class TestGsonConverter extends BaseTest { @Test public void json2Map() throws IOException { String lbmemberHashPath = "src/test/resources/lbmember_hash.txt"; String hashString = IOUtils.fileToString(lbmemberHashPath); Assert.assertNotNull(hashString); Map<String, Map<String, LBMemberSource>> map = new GsonConverter<LBMemberSource>(){}.json2Maps(hashString); for (Map.Entry<String, Map<String, LBMemberSource>> entry : map.entrySet()) { printHighlight(entry.getKey()); for (Map.Entry<String, LBMemberSource> entry2 : entry.getValue().entrySet()) { print(entry2.getValue().toString()); } } } }
本例中使用了Google Json中的TypeToken来获取具体泛型类的泛型参数类型,有关获取Java中泛型类的泛型参数类型,可参见另一篇博客:http://josh-persistence.iteye.com/blog/2165613
相关推荐
Gson是Google开发的一款强大的Java库,用于将Java对象转换为JSON格式的字符串,以及将JSON数据解析回等效的Java对象。这个压缩包包含了Gson库的版本2.8.1,它提供了两个主要的组件:`gson-2.8.1.jar`和`gson-2.8.1-...
介绍:Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object. 压缩包里有以下文件: ...
Gson是Google开发的一款强大的Java库,用于将Java对象转换为JSON字符串,以及将JSON数据反序列化回等效的Java对象。这个压缩包包含了Gson的2.8.2版本,提供了三个重要的组成部分:`gson-2.8.2.jar`、`gson-2.8.2-...
Gson-2.8.0的官方jar包合集【gson-2.8.0.jar,gson-2.8.0-sources.jar,gson-2.8.0-javadoc.jar】,JSON解析类库Gson库的jar包。
Gson库允许开发者将Java对象转换为对应的JSON字符串,反之亦然,使得数据交换和存储变得更加便捷。 首先,我们来了解一下JSON(JavaScript Object Notation)——这是一种轻量级的数据交换格式,易于人阅读和编写,...
赠送jar包:gson-2.8.0.jar; 赠送原API文档:gson-2.8.0-javadoc.jar; 赠送源代码:gson-2.8.0-sources.jar; 赠送Maven依赖信息文件:...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:gson-2.8.6.jar; 赠送原API文档:gson-2.8.6-javadoc.jar; 赠送源代码:gson-2.8.6-sources.jar; 赠送Maven依赖信息文件:...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
开发者可以在他们的项目中引入这个JAR文件,以利用Gson库解析JSON字符串到Java对象,或者将Java对象转换为JSON格式。例如,你可以使用`Gson()`构造器创建一个Gson实例,然后使用`toJson()`方法将Java对象转化为JSON...
4. **复杂对象处理**:Gson能处理嵌套的对象和数组,以及泛型类型,使得复杂的Java数据结构也能轻松转换成JSON。 5. **字段映射控制**:通过注解或配置,可以控制哪些字段被序列化或反序列化,以及如何进行转换。 ...
1. **对象到JSON字符串转换**:通过`Gson().toJson()`方法,你可以将任何Java对象转换为JSON字符串。这包括基本类型、复杂对象、集合和数组。 2. **JSON字符串到对象转换**:使用`Gson().fromJson()`方法,可以从...
谷歌的Gson库是一个强大的Java库,用于将Java对象转换为JSON格式的字符串,反之亦然。这个"google-gson-2.2.2Jar包"是Gson库的一个特定版本,版本号为2.2.2。在Java开发中,它被广泛应用于网络数据的传输、存储以及...
除了基本类型的转换,Gson还支持复杂的数据结构,如数组、集合和自定义类型。例如,如果你有一个包含多个`Person`对象的列表,你可以这样处理: ```java List<Person> people = new ArrayList(); // 添加Person对象...
例如,你可以创建一个Java对象,然后使用`Gson().toJson()`方法将其转换为JSON格式的字符串,便于在网络上传输或保存到文件中。 2. **反序列化**:将JSON字符串解析回Java对象。当你接收到JSON数据时,可以通过`...
4. 复杂类型处理:Gson支持数组、列表、Map和其他复杂数据结构的JSON转换。它可以自动处理嵌套的对象和数组。 5. 基本类型转换:Gson可以轻松地将基本数据类型(如int、double、boolean)转换为JSON值,反之亦然。 ...
赠送jar包:gson-2.8.9.jar; 赠送原API文档:gson-2.8.9-javadoc.jar; 赠送源代码:gson-2.8.9-sources.jar; 赠送Maven依赖信息文件:...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
Gson是Google开发的一个Java库,用于在Java对象和JSON数据之间进行映射。这个库使得Java对象可以轻松地转换成JSON格式,并且能够将JSON数据解析回等效的Java对象。`gson-gson-parent-2.10.1.tar.gz`是一个压缩包,...
Android使用Kotlin利用Gson解析多层嵌套Json数据
通过查看源代码,我们可以看到Gson是如何处理复杂的数据结构,如集合、自定义类、泛型等,并能学习到如何进行高效的JSON操作。 Gson库的主要特点和关键功能包括: 1. **简单易用**:Gson通过`Gson()`构造函数创建...
Gson-2.8.0的官方jar包合集【gson-2.8.0.jar,gson-2.8.0-sources.jar,gson-2.8.0-javadoc.jar】,JSON解析类库Gson库的jar包。