Android:解析Json数据

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,访问服务器时返回的数据常常是HTML、XML和JSON,这时我们需要去解析这些数据。JSON有两种结构、一是对象,二是数组。前者数据格式为 {key:value,key:value,...};后者数据格式为:["java","javascript","vb",...],当然数组里面也可以是对象。

实例一:用SDK的类库来解析JSON数据,最重要的一个类是JsonReader,他的构造方法是public JsonReader (Reader in);其中比较重要的方法是beginArray()、beginObject()、hasNext()、nextString(),nextInt()等、还有就是最后的end和close方法。感觉有点像SAX和PULL解析XML,也是一步一步解析下去的。

新建一个工具类:

<span style="font-size:14px;">package com.example.jsondemo;
import java.io.IOException;
import java.io.StringReader;
import android.util.JsonReader;
public class JsonUtils {
	public static void parseJson(String jsonData) {
		JsonReader reader = new JsonReader(new StringReader(jsonData));   //实例化一个JsonReader对象
		try {
			reader.beginArray();                //开始解析数组
			while (reader.hasNext()) {          //如果当前数组或对象存在元素则返回真
				reader.beginObject();       //开始解析对象
				while (reader.hasNext()) {
					String tagName = reader.nextName();   //将解析到的数据打印出来
					if (tagName.equals("name")) {
						System.out.println("-->>" + reader.nextString());
					} else if (tagName.equals("age")) {
						System.out.println("-->>" + reader.nextInt());
					}
				}
				reader.endObject();         //解析完一个对象
			}
			reader.endArray();                  //解析完数组
			reader.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
</span>
<span style="font-size:14px;">package com.example.jsondemo;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends ActionBarActivity {
	// [{\"name\":\"leelit\",\"age\":20},{\"name\":\"lina\",\"age\":21}]   模拟服务器返回的Json数据
	private String jsonData = "[{\"name\":\"leelit\",\"age\":20},{\"name\":\"lina\",\"age\":21}]";  //这里的/是转义字符
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button button = (Button) findViewById(R.id.button);
		button.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				System.out.println("Begin to parse Json");
				JsonUtils.parseJson(jsonData);
			}
		});
	}
}
</span>

结果:

解析过程:[{"name":"leelit","age":20},{"name":"lina","age":21}] 。开始解析数组  →  解析第一个对象  →  tagName = "name",打印出leelit  →  第一个对象还有元素,返回真  →  tagName = "age",打印出20  →  解析完第一个对象,还有第二个对象,返回真,又开始解析第二个对象,以此类推。

实例二:用GSON来解析含一个对象的JSON数据,其实就是将JSON数据转化为Java对象。首先下载一个GSON类库点击打开链接;然后将其导入工程当中:jar文件放入libs文件夹,然后右击bulid
path,最后add path就可以使用这个GSON类库了。

新建一个User类:

package com.example.jsondemo;

public class User {
	private String name;
	private int age;
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

新建一个工具类:

<span style="font-size:14px;">package com.example.jsondemo;

import java.io.StringReader;
import com.google.gson.Gson;
import android.util.JsonReader;

public class JsonUtils {
	public static void parseJson(String jsonData) {
		Gson gson = new Gson();                             //实例化一个GSON对象
		User user = gson.fromJson(jsonData, User.class);    //功过gson,将JSON数据转化为一个JavaBean对象。
		System.out.println("-->> " + user.getName() + " " + user.getAge());
	}
}
</span>
<span style="font-size:14px;">package com.example.jsondemo;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends ActionBarActivity {
	// {"name":"leelit","age":20};
	private String jsonData = "{\"name\":\"leelit\",\"age\":20}";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button button = (Button) findViewById(R.id.button);
		button.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				System.out.println("Begin to parse Json");
				JsonUtils.parseJson(jsonData);
			}
		});
	}
}
</span>

结果:

实例三:用GSON来解析数组JSON数据

新建一个User类

新建一个工具类

package com.example.jsondemo;

import java.lang.reflect.Type;
import java.util.Iterator;
import java.util.LinkedList;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class JsonUtils {

	public static void parseJson(String jsonData) {

		Type listType = new TypeToken<LinkedList<User>>() {
		}.getType();
		Gson gson = new Gson();
		LinkedList<User> users = gson.fromJson(jsonData, listType);    //将Json数据转化为一个LinkedList对象
		for (User user : users) {
			System.out.println("-->> " + user.getName() + " " + user.getAge());
		}
	}
}
package com.example.jsondemo;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends ActionBarActivity {
	// [{\"name\":\"leelit\",\"age\":20},{\"name\":\"lina\",\"age\":21}]
	private String jsonData = "[{\"name\":\"leelit\",\"age\":20},{\"name\":\"lina\",\"age\":21}]";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button button = (Button) findViewById(R.id.button);

		button.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				System.out.println("Begin to parse Json");
				JsonUtils.parseJson(jsonData);
			}
		});
	}
}

结果:

小结:熟悉JsonReader和Gson这个两个类就可以了。看视频教程很多都是自己做的服务器,然后返回数据再自己去解析,这样应该更深刻,不过现在还不会服务器这块。另外还知道的一个方法是用FastJson来解析,这个暂时不学先。

时间: 2024-07-29 09:10:07

Android:解析Json数据的相关文章

Android 解析json数据

1.JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等).这些特性使JSON成为理想的数据交换语言. 易于人阅读和编写,同时也易于机器解析和生成(网络传输速度

【ListViewJson】【MainActivity功能性分析,不讨论具体工具类的实现】【android解析json数据(包含对图片数据的异步缓存处理),并将其加载到listview中】

最近遇到了一个相当好.对初学者相当友善的项目,是描述如何将json数据解析,并加载到listview中. 但是个人认为以后所有类似功能的实现都可以使用这套工具. 项目也可以使用这套架构. 这个项目是处理每个news只有一个imgurl,应该考虑一下当imgurl数量不定的时候具体应该怎么解决. 首先项目源码结构如下: 项目下载链接:http://download.csdn.net/download/y562810463/8004245 在这个项目中的com.demo.app.common包完全可

【Android】解析JSON数据详解

Android解析JSON数据详解 JSON(JavaScript Object Notation) 定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. – Json.org JSON的结构: (1) Name/Value Pairs(无序的):类似所熟知的Keyed list. Has

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

Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下 Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率. 从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词. 第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组

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

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4063452.html 联系方式:[email protected] [正文] 文章回顾: Android网络之数据解析----SAX方式解析XML数据 一.Json数据的介绍                                                             

我的Android进阶之旅------&gt;解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

1.问题描述 首先,需要解析的Json数据类似于下面的格式: { ret: 0, msg: "normal return.", news: [ { id: "NEW2016062800875700", from: "腾讯新闻客户端", qqnews_download_url: "http://inews.qq.com/m?refer=openapi_for_xiaotiancai", articletype: "1&

Android 之 json数据的解析(jsonReader)

json数据的解析相对而言,还是比较容易的,实现的代码也十分简单.这里用的是jsonReade方法来进行json数据解析. 1.在解析之前,大家需要知道什么是json数据. json数据存储的对象是无序的“名称/值”对的集合.和其他的数据存储方式相比,json数据的可读性,可扩展性,编码难度,解码难度都有一定的优势.在json数据中, 对于一个对象: (1)一个对象以“{”(左括号)开始,“}”(右括号)结束. (2)每个“名称”后跟一个“:”(冒号): (3)“‘名称/值’ 对”之间使用“,”

Android关于JSON数据解析

一.什么是json json(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以客户端和服务器的数据交换格式往往通过json来进行交换.尤其是对于web开发来说,json数据格式在客户端直接可以通过javascript来进行解析. json一共有两种数据结构,一种是以 (key/value)对形式存在的无序的jsonObject对象,一个对象以“{”(左花括号)开始,“}”(右

Android 网络请求json数据,解析json数据,生成对应的java bean类一步到位,快速开发

Android 网络请求一般都涉及到图片和JSON数据,怎样快速的请求网络JSON数据,解析JSON数据,并且一步生成自己想要的Java bean实体类?这个涉及到Android 开发效率的问题.由于接触Android 网络这方面比较多,自然就找到一些好的方法来快速开发Android 网络模块的相关内容,接下来就为大家揭晓 一步快速请求,解析JSON 数据生成对应的Java bean实体类的方法. 注:我们先把思路讲解下吧: 1.网络请求JSON数据代码可以自己写,当然我还是推荐使用网络上开源的

Android中解析Json数据

在开发中经常会遇到解析json的问题 在这里总结几种解析的方式: 方式一: json数据: private String jsonData = "[{\"name\":\"Michael\",\"age\":20},{\"name\":\"Mike\",\"age\":21}]"; 解析jsonData的方法 try { //如果需要解析Json数据,首先要生成一个J