gson笔记 解析json数据
gson中负责json数据解析的类是JsonReader。
Json格式有两种结构,一种是对象(键值对的组合,无序),另外一种是数组(值的有序集合)。
因此针对这两种格式,JsonReader提供了不同的处理方法。
针对对象
{
"isRemote":false,
"remote":{
"hubURL":"http://127.0.0.1:4444/wd/hub/",
"browser":"firefox",
"os":"WINDOWS"
},
"local":{
"browser":"webdriver.firefox.bin",
"path":"D:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"
}
}
下面读取json对象的内容。
private Boolean isRemote = false;
private LocalBrowser lcBrowser;
private RemoteBrowser rmBrowser;
private void readConf(InputStream in) throws IOException{
JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
try{
reader.beginObject(); //表示开始读入对象,此时指向的是最外层的对象
while(reader.hasNext()){ //判断当前对象是否仍有属性存在
String name = reader.nextName(); //如有则获得属性名
if(name.equals("isRemote")){
isRemote = reader.nextBoolean();
}else if(name.equals("remote")){
rmBrowser=readRemote(reader);
}else if(name.equals("local")){
lcBrowser = readLocal(reader);
}else{
reader.skipValue(); //跳过不处理这个值
reader.endObject(); //表示对象读取结束
}finally{
reader.close(); //关闭reader
}
}
private RemoteBrowser readRemote(JsonReader reader) throws IOException{
String hubURL = null;
String browser = null;
String os =null;
reader.beginObject(); //这时指向的是remote属性对应的对象
while(reader.hasNext()){
String name = reader.nextName();
if(name.equals("hubURL")){
hubURL = reader.nextString();
}else if(name.equals("browser")){
browser = reader.nextString();
}else if(name.equals("os")){
os = reader.nextString();
}else{
reader.skipValue();
}
}
reader.endObject();
return new RemoteBrowser(hubURL, browser, os);
}
private LocalBrowser readLocal(JsonReader reader) throws IOException{
String browser = null;
String path = null;
reader.beginObject();
while(reader.hasNext()){
String name = reader.nextName();
if(name.equals("browser")){
browser = reader.nextString();
}else if(name.equals("path")){
path = reader.nextString();
}else{
reader.skipValue();
}
}
reader.endObject();
return new LocalBrowser(browser, path);
}
针对数组
[
{
"id": 912345678901,
"text": "How do I read a JSON stream in Java?",
"geo": null,
"user": {
"name": "json_newb",
"followers_count": 41
}
},
{
"id": 912345678902,
"text": "@json_newb just use JsonReader!",
"geo": [50.454722, -104.606667],
"user": {
"name": "jesse",
"followers_count": 2
}
}
]
public List<Message> readJsonStream(InputStream in) throws IOException {
JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
try {
return readMessagesArray(reader);
} finally {
reader.close();
}
}
public List<Message> readMessagesArray(JsonReader reader) throws IOException {
List<Message> messages = new ArrayList<Message>();
reader.beginArray(); //开始读取数组,此时指向的是最外层的数组
while (reader.hasNext()) {
messages.add(readMessage(reader));//读取数组元素
}
reader.endArray();
return messages;
}
参考链接:
json介绍
Gson
gson笔记 解析json数据的更多相关文章
- [转]用Gson来解析Json数据
转自太阳尚远的博客:http://blog.yeqianfeng.me/2016/03/02/use_gson_to_parse_json/ 在我们实际开发中像Json和XML这两种格式的数据是最常见 ...
- Gson的解析Json数据的两种方式
转载:https://blog.csdn.net/huplion/article/details/78984977 在线JSON字符串转Java实体类(JavaBean.Entity): https: ...
- Android网络之数据解析----使用Google Gson解析Json数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
- Java创建和解析Json数据方法(五)——Google Gson包的使用
(五)Google Gson包的使用 1.简介 Gson包中,使用最多的是Gson类的toJson()和fromJson()方法: ①toJson():将java对象转化为json数据 ...
- Android中使用Gson解析JSON数据的两种方法
Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下 Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...
- Google Gson解析Json数据应用实例
转自:http://lixigao449778967.blog.163.com/blog/static/24985164201269105928783/ 1.需要的Jar包 1) Google Gso ...
- Google中Gson的使用解析json数据-------学习篇
之前写过一篇Gson解析json数据的基本应用,这里不多说,直接上例子. 有兴趣的可以先阅读下之前那篇,这里附上链接: http://www.cnblogs.com/Ant-soldier/p/632 ...
- 通过Gson解析Json数据
Json是一种数据格式,便于数据传输.存储.交换:Gson是一种组件库,可以把java对象数据转换成json数据格式. gson.jar的下载地址:http://search.maven.org/#s ...
随机推荐
- 让pv3d(papervision3D)支持单帧前进、后退(nextFrame)。
下载最新的源码,找到animationController. 修改如下: package org.papervision3d.core.controller { import flash.events ...
- 单节点部署Hadoop教程
搭建HDFS 增加主机名 我这里仅仅增加了master主机名 [root@10 /xinghl/hadoop/bin]$ cat /etc/hosts 127.0.0.1 localhost 10.0 ...
- jQuery第二篇 (帅哥)
1.1 jQuery操作DOM jQuery课程的目标:学会使用jQuery设计常见效果 选择器 基本选择器:#id ..class .element.* . 层级选择器: 空格.>.+.~ 基 ...
- 解密jQuery事件核心 - 自定义设计(三)
接上文http://www.cnblogs.com/aaronjs/p/3447483.html 本文重点:自定义事件 “通过事件机制,可以将类设计为独立的模块,通过事件对外通信,提高了程序的开发效率 ...
- Android之登录那点事
随着互联网的高速发展,一个应用为了保护用户的隐私,通常会通过设置用户名+密码的验证方式保证用户隐私的相对安全,我知道一般网站的登录验证,通常会设置一个二维码,通过验证二维码,防止恶意软件通过机械程序, ...
- iOS开发之自定义表情键盘(组件封装与自动布局)
下面的东西是编写自定义的表情键盘,话不多说,开门见山吧!下面主要用到的知识有MVC, iOS开发中的自动布局,自定义组件的封装与使用,Block回调,CoreData的使用.有的小伙伴可能会问写一个自 ...
- MongoDB碎碎念
1. 如何从备份节点读取数据 默认是不允许的,会报如下错误: testReplSet:SECONDARY> show dbs --19T10:: E QUERY [thread1] Error: ...
- Redis碎碎念
1. 关于Cluster cluster_known_nodes:4 cluster_size:3 说明集群中总共有4个节点:集群的size是3,相当于3个主节点参与了槽位分配 2. 如何查看key的 ...
- Java-Spring:java.lang.ClassCastException: com.sun.proxy.$Proxy* cannot be cast to***问题解决方案
java.lang.ClassCastException: com.sun.proxy.$Proxy* cannot be cast to***问题解决方案 临床表现: 病例: 定义代理类: @Tra ...
- 微信小程序小技巧系列《二》show内容展示,上传文件编码问题
作者:gou-tian 来自:github show内容展示 尝试用微信小程序的template组件实现.同时,尝试页面间转跳时传参,在目标页面引入模板文件实现 写的更少,做的更多 篇幅有限详细代码此 ...