通过GSON解析复杂json数据(一)
2017-08-10 21:40
357 查看
普通的Json数据通过 JSONObject 和 GSON 很容易可以解析
如 :
String str = “[{\”travelCode\”:\”20170516010002\”,\”startTime\”:\”2017-06-03\”,\”endTime\”:\”2017-06-05\”,\”pagenum\”:\”\”}”];
这是最简单的 JSON 数据格式 ,两端的中括号代表着它是个 JSON 数组 ,
我们只要使用
就可以通过键读取数据
注意解析时分析 json 的结构
那么复杂的 json 数据该怎么解析呢?
疯狂百度之后发现 , 通过分析 json 格式 , 创建 javaBean 对象 , 通过javaBean 对象可以很简单的将 json 解析为 list 或者 object
如:
ps : 这串 json 数据是我和一家外企做对接的部分数据 , 曾经搞火了和我做对接的小伙子
接下来我们分析这串 json
由外至内 , 如果将整体看作一个 Object , 那么由于最外端中括号的存在 , 它是一个
每一个部分是一个类 , 最外层的类包含 users 类
这里有几个注意的地方
1. 内部类必须为public static
2. 必须具有原生的不带参数的构造方法
3. 你的属性名应该和 json 字符串的键名一一对应
然后我们可以通过
很简单的将其转换为实体
测试
但是有些时候为了方便必须要将
转换为更直观的 map , 将在下文中给出方案
如 :
String str = “[{\”travelCode\”:\”20170516010002\”,\”startTime\”:\”2017-06-03\”,\”endTime\”:\”2017-06-05\”,\”pagenum\”:\”\”}”];
这是最简单的 JSON 数据格式 ,两端的中括号代表着它是个 JSON 数组 ,
我们只要使用
List<Map<String,Object>> listMap = gson.fromJson(str, new TypeToken<List<Map<String,String>>>(){}.getType());
就可以通过键读取数据
注意解析时分析 json 的结构
那么复杂的 json 数据该怎么解析呢?
疯狂百度之后发现 , 通过分析 json 格式 , 创建 javaBean 对象 , 通过javaBean 对象可以很简单的将 json 解析为 list 或者 object
如:
String str = "[{\"users\":[{\"name\":\"系统001\",\"code\":\"sys01\"},{\"name\":\"系统003\",\"code\":\"sys03\"}],\"travel_theme\":\"测试002\",\"travel_start_time\":\"2017-08-08 10:07\",\"travel_end_time\":\"2017-08-22 10:07\",\"process_start_time\":\"2017-08-07 10:09:06\",\"process_end_time\":\"2017-08-07 10:28:46\"},{\"users\":[{\"name\":\"系统002\",\"code\":\"sys002\"}],\"travel_theme\":\"测试004\",\"travel_start_time\":\"2017-08-07 10:11\",\"travel_end_time\":\"2017-08-08 10:11\",\"process_start_time\":\"2017-08-07 10:12:34\",\"process_end_time\":\"2017-08-07 10:28:51\"}]";
ps : 这串 json 数据是我和一家外企做对接的部分数据 , 曾经搞火了和我做对接的小伙子
接下来我们分析这串 json
由外至内 , 如果将整体看作一个 Object , 那么由于最外端中括号的存在 , 它是一个
List<Object>, 这个 List 的泛型由两部分组成 , users 和 其他 , users 里面也是一个
List<Object>它包含了 name , code 字段, 所以我们的 javaBean 定义就显而易见了
每一个部分是一个类 , 最外层的类包含 users 类
import java.util.List; public class TestGsonUnSer { private List<SonGson> users; private String travel_theme; private String travel_start_time; private String travel_end_time; private String process_start_time; private String process_end_time; public List<SonGson> getUsers() { return users; } public void setUsers(List<SonGson> users) { this.users = users; } public String getTravel_theme() { return travel_theme; } public void setTravel_theme(String travel_theme) { this.travel_theme = travel_theme; } public String getTravel_start_time() { return travel_start_time; } public void setTravel_start_time(String travel_start_time) { this.travel_start_time = travel_start_time; } public String getTravel_end_time() { return travel_end_time; } public void setTravel_end_time(String travel_end_time) { this.travel_end_time = travel_end_time; } public String getProcess_start_time() { return process_start_time; } public void setProcess_start_time(String process_start_time) { this.process_start_time = process_start_time; } public String getProcess_end_time() { return process_end_time; } public void setProcess_end_time(String process_end_time) { this.process_end_time = process_end_time; } @Override public String toString() { return "TestGsonUnSer [users=" + users + ", travel_theme=" + travel_theme + ", travel_start_time=" + travel_start_time + ", travel_end_time=" + travel_end_time + ", process_start_time=" + process_start_time + ", process_end_time=" + process_end_time + "]"; } public static class SonGson{ private String name; private String code; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } @Override public String toString() { return "SonGson [name=" + name + ", code=" + code + "]"; } } }
这里有几个注意的地方
1. 内部类必须为public static
2. 必须具有原生的不带参数的构造方法
3. 你的属性名应该和 json 字符串的键名一一对应
然后我们可以通过
List<TestGsonUnSer> list = gson.fromJson(str, new TypeToken<List<TestGsonUnSer>>(){}.getType());
很简单的将其转换为实体
测试
System.out.println(list.get(0).getUsers().get(0).getName()); 输出:系统001
但是有些时候为了方便必须要将
List<TestGsonUnSer>
转换为更直观的 map , 将在下文中给出方案
相关文章推荐
- 通过GSON解析复杂json数据(二)
- 关于Gson解析复杂类型的json数据
- 使用Gson解析复杂、变态的Json数据(包含中文key)
- 使用Gson解析复杂、变态的Json数据(包含中文key)
- 使用Gson解析复杂的json数据
- gson解析复杂的json数据
- 通过Gson解析Json数据
- 使用Gson解析复杂的json数据
- 使用Gson解析复杂的json数据(转)
- 通过Gson解析Json数据
- GSON解析复杂json数据格式
- 使用Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- 关于通过Gson解析JSon数据
- 使用Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- Gson解析复杂Json数据
- 使用Gson解析复杂的json数据