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数据的更多相关文章

  1. [转]用Gson来解析Json数据

    转自太阳尚远的博客:http://blog.yeqianfeng.me/2016/03/02/use_gson_to_parse_json/ 在我们实际开发中像Json和XML这两种格式的数据是最常见 ...

  2. Gson的解析Json数据的两种方式

    转载:https://blog.csdn.net/huplion/article/details/78984977 在线JSON字符串转Java实体类(JavaBean.Entity): https: ...

  3. Android网络之数据解析----使用Google Gson解析Json数据

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

  5. Java创建和解析Json数据方法(五)——Google Gson包的使用

    (五)Google Gson包的使用 1.简介 Gson包中,使用最多的是Gson类的toJson()和fromJson()方法:         ①toJson():将java对象转化为json数据 ...

  6. Android中使用Gson解析JSON数据的两种方法

    Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下   Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...

  7. Google Gson解析Json数据应用实例

    转自:http://lixigao449778967.blog.163.com/blog/static/24985164201269105928783/ 1.需要的Jar包 1) Google Gso ...

  8. Google中Gson的使用解析json数据-------学习篇

    之前写过一篇Gson解析json数据的基本应用,这里不多说,直接上例子. 有兴趣的可以先阅读下之前那篇,这里附上链接: http://www.cnblogs.com/Ant-soldier/p/632 ...

  9. 通过Gson解析Json数据

    Json是一种数据格式,便于数据传输.存储.交换:Gson是一种组件库,可以把java对象数据转换成json数据格式. gson.jar的下载地址:http://search.maven.org/#s ...

随机推荐

  1. 【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信

    在工控测试系统中,经常需要使用到各类程控仪器,这些程控仪器通常具有GPIB.LAN.USB等硬件接口,计算机通过这些接口能够与其通信,从而实现自动测量.数据采集.数据分析和数据处理等操作.本文主要介绍 ...

  2. OData的初步认识

    What – OData是什么? OData - Open Data Protocal,是一个设计和使用RESTful API的标准.REST本身只是一个构建web服务的思想和理念,其没有规定一个统一 ...

  3. 修改HTML5 input placeholder 颜色及修改失效的解决办法

    input::input-placeholder{color: #bdbdbd ;} /* 有些资料显示需要写,有些显示不需要,但是在编辑器webstorm中该属性不被识别 */ ::-webkit- ...

  4. 【hbase0.96】基于hadoop搭建hbase的心得

    hbase是基于hadoop的hdfs框架做的分布式表格存储系统,所谓表格系统就是在k/v系统的基础上,对value部分支持column family和column,并支持多版本读写. hbase的工 ...

  5. ExecuteReader在执行有输出参数的存储过程时拿不到输出参数

    异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 后期会在博客首发更新:http://dnt.dkill.net/Article/D ...

  6. Sql Server系列:游标

    1. 游标简介 游标是一种处理数据的方法,主要用于存储过程.触发器和Transact-SQL脚本中.SELECT语句返回的是一个结果集,游标能够从包含多条数据记录的结果集中每次提取一条记录. 游标的特 ...

  7. AngularJs 动态加载模块和依赖

    最近项目比较忙额,白天要上班,晚上回来还需要做Angular知识点的ppt给同事,毕竟年底要辞职了,项目的后续开发还是需要有人接手的,所以就占用了晚上学习的时间.本来一直不打算写这些第三方插件的学习笔 ...

  8. UWP开发之Mvvmlight实践三:简单MVVM实例开发(图文详解付代码)

    在做MVVM各种框架对比之前,我觉得有必要先自己做一个简单的MVVM实现案例比较好,这样就可以看到自己实现的时候有那些不方便的地方.而各种框架又是怎么解决我们这些麻烦的. 案例介绍:用户登录画面,没有 ...

  9. ASP.NET网站优化(转自一位博友的文章,写的非常好)

    不修改代码就能优化ASP.NET网站性能的一些方法 阅读目录 开始 配置OutputCache 启用内容过期 解决资源文件升级问题 启用压缩 删除无用的HttpModule 其它优化选项 本文将介绍一 ...

  10. 记录一则ORA-00054,ORA-00031解决过程

    生产环境:AIX 5.3 + Oracle 10.2.0.5 任务要求:普通表改造分区表,历史数据不要   这个需求很简单: pl/sql导出建表语句,依次修改成分区的建表语句,注意将索引修改成本地索 ...