有什么不懂的可以去官网去看看:www.json.org
在google android中也有关于解析JSON的类库:JsonReader,但是只能在3.0以后的版本中才可以用,在这里我们用google提供的类库google-gson,可以从code.google.com/p/google-gson/下载jar包。
下面通过一个小例子来学习一下:
例子:
[{"name":"zhangsan","age":22},{"name":"lisi","age":23}]
分析:
1.开始解析数组
2.开始解析对象
3.解析键值对
4.解析键值对
5.解析对象结束
6.开始解析对象
7.解析键值对
8.解析键值对
9.解析对象结束
10.解析数组结束
下面的是一个Activity,很简单只有一个button,并为button添加单击事件,
| 01 | packagecom.tony.json;  | 
 
| 03 | importandroid.app.Activity;  | 
 
| 04 | importandroid.os.Bundle;  | 
 
| 05 | importandroid.view.View;  | 
 
| 06 | importandroid.widget.Button;  | 
 
| 08 | publicclassJsonActivity extendsActivity {  | 
 
| 09 |     /** Called when the activity is first created. */ | 
 
| 11 |     privateString jsonData = "[{\"name\":\"zhangsan\",\"age\":22},{\"name\":\"lisi\",\"age\":23}]";  | 
 
| 12 |     privateButton jsonButton;  | 
 
| 14 |     publicvoidonCreate(Bundle savedInstanceState) {  | 
 
| 15 |         super.onCreate(savedInstanceState);  | 
 
| 16 |         setContentView(R.layout.main);  | 
 
| 17 |         jsonButton = (Button) findViewById(R.id.json_button);  | 
 
| 18 |         jsonButton.setOnClickListener(newView.OnClickListener() {  | 
 
| 21 |             publicvoidonClick(View v) {  | 
 
| 22 |                 JsonUtils jsonUtils = newJsonUtils();  | 
 
| 23 |                 jsonUtils.parseJson(jsonData);  | 
 
 
 
这个类中主要是解析json数组:
| 01 | packagecom.tony.json;  | 
 
| 03 | importjava.io.IOException;  | 
 
| 04 | importjava.io.StringReader;  | 
 
| 06 | importandroid.util.Log;  | 
 
| 08 | importcom.google.gson.stream.JsonReader;  | 
 
| 10 | publicclassJsonUtils {  | 
 
| 11 |     privatestaticfinalString TAG = "JsonUtils";  | 
 
| 13 |     publicvoidparseJson(String jsonData){  | 
 
| 14 |         JsonReader reader = newJsonReader(newStringReader(jsonData));  | 
 
| 16 |             reader.beginArray();    // 开始解析数组  | 
 
| 17 |             while(reader.hasNext()) {  | 
 
| 18 |                 reader.beginObject();   // 开始解析对象  | 
 
| 19 |                 while(reader.hasNext()) {  | 
 
| 20 |                     String tagName = reader.nextName(); // 得到键值对中的key  | 
 
| 21 |                     if(tagName.equals("name")) {   // key为name时  | 
 
| 22 |                         Log.i(TAG, "name--------->"+ reader.nextString());  // 得到key中的内容  | 
 
| 23 |                     }elseif(tagName.equals("age")) {  // key为age时  | 
 
| 24 |                         Log.i(TAG, "age--------->"+ reader.nextInt());  // 得到key中的内容  | 
 
| 30 |         } catch(IOException e) {  | 
 
 
 
下面是运行后在logcat中打印出的结果:
												
												
						- 1.Android中解析json程序代码
		Android程序解析json数据可以通过gson的方式,这种情况需要导入相应的jar包.测试代码如下: @Override protected void onCreate(Bundle savedI ... 
- Android中解析JSON形式的数据
		1.JSON(JavaScript Object Notation) 定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式, ... 
- android 中解析json格式数据
		本文来自http://tonysun3544.iteye.com/category/188238 package com.tony.json; import android.app.Activity; ... 
- Android中解析JSON格式数据常见方法合集
		待解析的JSON格式的文件如下: [{"id":"5", "version":"1.0", "name&quo ... 
- Android中解析Json数据
		在开发中常常会遇到解析json的问题 在这里总结几种解析的方式: 方式一: json数据: private String jsonData = "[{\"name\":\ ... 
- [入门阅读]怎样在android中解析JSON
		JSON入门介绍:http://kirin.javaeye.com/blog/616226 也参考了此篇:http://blog.163.com/fushaolin@126/blog/static/1 ... 
- 实现android上解析Json格式数据功能
		实现android上解析Json格式数据功能,该源码转载于安卓教程网的,http://android.662p.com ,个人感觉还不错的,大家可以看看一下吧. package com.practic ... 
- android中解析文件的三种方式
		android中解析文件的三种方式     好久没有动手写点东西了,最近在研究android的相关技术,现在就android中解析文件的三种方式做以下总结.其主要有:SAX(Simple API fo ... 
- [置顶] Android学习系列-Android中解析xml(7)
		Android学习系列-Android中解析xml(7) 一,概述 1,一个是DOM,它是生成一个树,有了树以后你搜索.查找都可以做. 2,另一种是基于流的,就是解析器从头到尾解析一遍xml文件.   ... 
随机推荐
	
									- “更高效率:标准化+简约风+移动化”--K2 BPM老客户交流会
			主题:工作流主数据标准化和移动工作流带来的企业沟通建设机会 嘉宾:李瑞延(盛大网络IT总监) 公司管理需要更好的工作流 -为决策提供依据 通过对各级业务公司各类流程数据的获取与分析,为管理决策提供必要 ... 
- Linux Lab
			ssh vi /etc/apt/sources.list su ssh username@ipaddress eg : ssh root@172.16.247.143 实验一 fdisk /dev/s ... 
- Android 监听ContentProvider的数据改变
			今天介绍一下怎么监听ContentProvider的数据改变,主要的方法是:getContext().getContentResolver().notifyChange(uri,null),这行代码是 ... 
- Ubuntu 13.04设置root用户
			1 .设置root用户密码:passwd root 输入密码 2 .编辑lightdm.conf gedit /etc/lightdm/lightdm.conf 最后加: greeter-show-m ... 
- [微软]technet与msdn
			我们搜索一个微软术语,有时定位到technet页面,有时定位到msdn页面.我直观的理解就是technet教人们如何使用微软产品,而msdn指导人们如何开发基于微软产品的软件.那么微软对它们具体定位是 ... 
- java应用程序和虚拟机实例之间的关系
			每一个java程序都会产生一个java虚拟机的实例.并不是说一个物理机上,运行多个java应用程序就只有一个java虚拟机实例,多少个java应用程序就有多少个java虚拟机实例. 
- C++除法取整
			使用floor函数.floor(x)返回的是小于或等于x的最大整数.如:     floor(2.5) = 2 floor(-2.5) = -3 使用ceil函数.ceil(x)返回的是大于x的最小整 ... 
- hdu 2051
			ps:这道题是题目坑爹了...题目说不考虑n=0的...但其实要考虑...醉了 中文意思:输入一个10进制的数,输出他的二进制数 代码: #include "stdio.h"int ... 
- META标签的NAME变量
			META标签的NAME变量语法格式是: <META NAME=xxx CONTENT=xxxxxxxxxxxxxxxxxx> 其中xxx主要有下面几种参数: 1. Keywords(关键字 ... 
- RabbitMQ、Redis
			进程QUEUE,可以是父进程与子进程间进行交互,也可以是同属于一个父进程的子进程间的交互:如果要实现进程A与进程B之间的通信,就需要借助一个中间进程了,我们习惯称为消息队列. QQ无法直接与WORD通 ...