(以下基本都是郭霖大神《第一行代码》中的知识)

JSON数据与xml相比,优势在于体积更小,传输所需的流量少。但是缺点也很明显,就是语义性较差。

下面是一组JSON格式的数据。

[{"id":"","version":"5.5","name":"Angry Birds"},
{"id":"","version":"7.0","name":"Clash of Clans"},
{"id":"","version":"3.5","name":"Hey Day"}]

解析JSON的方法同样很多,这里主要说一下官方提供的JSONObject和谷歌提供的开源库GSON。

1 使用JSONObject解析JSON数据

先看代码

public void parseJSONWithJSONObject(String jsonData){
try{
JSONArray jsonArray = new JSONArray(jsonData);
for(int i=0;i<jsonArray.length();i++){
JSONOject jsonObject = jsonArray.getJSONObject(i);
String id = jsonObject.getString("id");
String name = jsonObject.getString("name");
String version = jsonObject.getString("version");
Log.d("MainActivity","id is " + id);
Log.d("MainActivity","name is " + name);
Log.d("MainActivity","version is " + version);
}
}catch(Exception e){
e.printStackTrace();
}
}

可以看到JSON数据的解析相对XML数据的解析会简单很多。

首先是获取JSONArray数组实例。

然后通过这个实例的getJSONObject()方法,获取index对应的JSONObject实例。

最后通过JSONObject实例的getString()方法,获取“键”所对应的值。

1.1 JSONArray

下面是Android API中对JSONArray类的描述。可以看到JSONArray是一个有序的值序列。它的外部文本形式是用方括号括起来的字符串,用逗号分隔值。

内部形势是通过get和opt方法可以通过“索引”获取“值”的对象,“值”可以通过put方法改变或者添加。

1.2 JSONObject

JSONObject 是个无序的键值对的集合。它的外部形式是一个用大括号括起来的字符串,在键和值之间有冒号,值和下一个键之间是逗号。

内部形式是一个具有get和opt方法的对象,用于按键访问值,通过put方法可以改变或添加值。

2 使用GSON解析JSON数据

使用谷歌开源库GSON解析JSON数据也相当简单。它可以将一段JSON格式的字符串自动映射成一个对象,从而不需要我们再手动去编写代码进行解析了。

比如我们有下面这段JSON数据。

{"name":"Tom","age":20}

要解析这段数据我们创建一个与它对应的类Person,里面加入name age两个字段。

之后使用下面这段代码就可以解析这段JSON数据了。

Gson gson = new Gson();
Person person = gson.fromJson(jsonData,Person.class);

之后就可以和操作普通对象一样获取数据。比如需要获取人的名字:

String name = person.getName();

如果需要解析一段JSON数据,则需要借助TypeToken将期望解析成的数据类型传入到fromJson()方法中,如下所示:

List<Person> people = gson.fromJson(jsonData, new TypeToken<List<Person>>() {}.getType());

下面是使用GSON解析JSON数据的代码。

public void parseJSONWithGSON(String jsonData){
Gson gson = new Gson();
List<App> appList = gson.fromJson(jsonData,new TypeToken<List<App>>(){}.getType());
for(App app : appList){
Log.d("MainActivity","id is " + app.getId());
Log.d("MainActivity","name is " + app.getName());
Log.d("MainActivity","version is " +app.getVersion());
}
}

其中App是我们创建的一个类,里面存放了id name version等字段以及他们的get set方法。

综上JSON的解析就说完了。比XML还是简单很多。

Android 之JSON数据解析的更多相关文章

  1. Android系列---JSON数据解析

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  2. Android 实现Json数据解析,并进行应用!

    从网站上获取数据然后再客户端进行解析是常见的数据交互.下面是常用的一些接口网址: webservice工厂接口 http://www.36wu.com 快递查询接口http://webservice. ...

  3. Android的JSON数据解析

    一. 使用原生方式解析 准备工作:准备一个布局文件,用来显示元数据与转换之后的数据 <?xml version="1.0" encoding="utf-8" ...

  4. Android关于JSON数据解析

    一.什么是json json(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以 ...

  5. Android下Json数据解析

    如从网络获取JSON 则需要创建一个工具类,该类返回一个字符串为JSON文本 package com.example.jsonapp; import java.io.InputStreamReader ...

  6. Android 之 json数据的解析(jsonReader)

    json数据的解析相对而言,还是比较容易的,实现的代码也十分简单.这里用的是jsonReade方法来进行json数据解析. 1.在解析之前,大家需要知道什么是json数据. json数据存储的对象是无 ...

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

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

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

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

  9. Android JSON数据解析(GSON方式)

    要创建和解析JSON数据,也可以使用GSON来完成.GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.使用GSON,可以很容易的将一串JSON数据转换为一个Jav ...

随机推荐

  1. OpenCV---高斯模糊(均值模糊的另一种)

    高斯分布: 高斯模糊的原理 一:图像产生高斯噪声循环代码实现(耗时) def clamp(pv): #使我们的随机值在0-255之间 : : return pv import cv2 as cv im ...

  2. /etc/rc.d/里文件的作用

    rc.sysinit指的是系统启动不管进哪个运行级别必须做的初始化工作, rcn.d目录指的是系统进对应n的运行级别时候系统必须做的工作,目录下S打头的服务指进此运行级别时候启动的服务,而K打头的指离 ...

  3. 「七天自制PHP框架」应用:Model外键链接

    这里以行政区数据为例: 一级行政区数据范例: 二级行政区范例: 三级行政区范例: 在Model层建立三个Model class ProvinceModel extends Model{ public ...

  4. Anagrams by Stack(深度优先搜索)

    ZOJ Problem Set - 1004 Anagrams by Stack Time Limit: 2 Seconds      Memory Limit: 65536 KB How can a ...

  5. 【BZOJ】2243 [SDOI2011]染色

    [算法]树链剖分+线段树 [题解] 树链剖分算法:http://www.cnblogs.com/onioncyc/p/6207462.html 定义线段树结构体有l,r,lc,rc,sum,data. ...

  6. 【CodeForces】827 D. Best Edge Weight 最小生成树+倍增LCA+并查集

    [题目]D. Best Edge Weight [题意]给定n个点m条边的带边权无向连通图,对每条边求最大边权,满足其他边权不变的前提下图的任意最小生成树都经过它.n,m<=2*10^5,1&l ...

  7. Java并发编程学习路线

    一年前由于工作需要从微软技术栈入坑Java,并陆陆续续做了一个Java后台项目,目前在搞Scala+Java混合的后台开发,一直觉得并发编程是所有后台工程师的基本功,所以也学习了小一年Java的并发工 ...

  8. SDUT 3929

    Description 蓝色空间号和万有引力号进入了四维水洼,发现了四维物体--魔戒. 这里我们把飞船和魔戒都抽象为四维空间中的一个点,分别标为 "S" 和 "E&quo ...

  9. OGG相关操作

    参数文件详解: 1)truncate ogg 进程: Manager进程:manager进程是配置在源端和目标端 Extract(抽取)进程:部署在源端,用于捕获数据表或者日志中的数据文件: Pump ...

  10. Minimum Palindromic Factorization(最少回文串分割)

    Minimum Palindromic Factorization(最少回文串分割) 以下内容大部分(可以说除了关于回文树的部分)来自论文A Subquadratic Algorithm for Mi ...