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 ...
随机推荐
- 【VC++技术杂谈004】使用微软TTS语音引擎实现文本朗读
本文主要介绍如何使用微软TTS语音引擎实现文本朗读,以及生成wav格式的声音文件. 1.语音引擎及语音库的安装 TTS(Text-To-Speech)是指文本语音的简称,即通过TTS引擎把文本转化为语 ...
- 学习RBAC 用户·角色·权限·表
- 详解CSS的相对定位和绝对定位
CSS的相对定位和绝对定位通常情况下,我们元素的position属性的值默认为static 就是没有定位,元素出现在正常的文档流中,,这个时候你给这个元素设置的left,right,bottom,to ...
- intellij IDEA 出现“Usage of API documented as @since 1.6+”的解决办法
问题 在导入java.io.console的时候出现"Usage of API documented as @since 1.6+"
- Linux线程体传递参数的方法详解
传递参数的两种方法 线程函数只有一个参数的情况:直接定义一个变量通过应用传给线程函数. 例子 #include #include using namespace std; pthread_t thre ...
- IOS开发资料汇总
1 IOS账号注册.程序发布流程 1)http://jamesli.cn/blog/?p=955 2)http://jamesli.cn/blog/?p=966 3)http://jamesli.cn ...
- Python 模块学习:os模块
一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.(一语中的) 二.常用方法 1.os.name 输出字符串指示正在使用的平台 ...
- 手机软件Toast无法显示提示信息
近日在做项目时,测试组的同事提出一个bug,就是在一台LG手机上,原本应该显示的Toast信息,都不显示,消息栏也没有出现通知,后来经过查资料知道有些三星.LG手机默认禁用了显示通知那一项,而不显示通 ...
- Hibernate注解
前言: 最近正在学习Hibernate通过注解(annotation)来管理映射关系,以前都是通过XML映射文件.下面拿个小例子说一下. 数据库物理模型: 数据库的描述: 一篇博客随笔可以分到不同的类 ...
- DOM扩展-Selectors API(选择符 API)、元素遍历
DOM扩展 对DOM的两个主要扩展是SelectorsAPI(选择符API)和HTML5 SelectorsAPI(选择符API)是由W3C发起制定的一个标准,致力于浏览器原生支持CSS查询,Sele ...