Android--用JSON解析数据

标签: android json 解析 | 发表时间:2013-02-20 22:09 | 作者:zlQQhs
出处:http://blog.csdn.net

gson-1.7.1.jar,Gson在Android3.0以上才能直接使用,在3.0以下想使用可以从外部导入jar包

下载链接: http://download.csdn.net/detail/zlqqhs/5075995

 

新建工程,新建一个libs文件夹,将gson-1.7.1.jar复制到libs文件夹中

右键gson-1.7.1.jar,选择Build Path,选择Add...那一项

 

package com.vince.json;

import java.io.IOException;
import java.io.StringReader;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;

public class JSONActivity extends Activity {
	private Button btnJson1,btnJson2,btnJson3,btnJson4,btnJson5;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btnJson1 = (Button) findViewById(R.id.button1_json1);
        btnJson2 = (Button) findViewById(R.id.button2_json2);
        btnJson3 = (Button) findViewById(R.id.button3_json3);
        btnJson4 = (Button) findViewById(R.id.button4_json4);
        btnJson5 = (Button) findViewById(R.id.button5_json5);
        
        btnJson1.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				json1();
			}
		});
        btnJson2.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				json2();
			}
		});
        btnJson3.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				json3();
			}
		});
        btnJson4.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				json4();
			}
		});
        btnJson5.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				json5();
			}
		});
    }
    
    //使用GSON把一组对象转换成json数据
    protected void json5() {
    	Student s1 = new Student(1,"jack","男",20);
    	Student s2 = new Student(2,"lucy","女",21);
    	List<Student> list = new ArrayList<Student>();
    	list.add(s1);
    	list.add(s2);
    	
    	Gson gson = new Gson();
    	Type type = new TypeToken<List<Student>>(){}.getType();
    	String json = gson.toJson(list, type);
    	Toast.makeText(this, json, Toast.LENGTH_SHORT).show();
	}

	//使用GSON把一个对象转换成json数据
    protected void json4() {
		Student s = new Student(1,"jack","男",20);
		Gson gson = new Gson();
		String json = gson.toJson(s);
		Toast.makeText(this, json, Toast.LENGTH_SHORT).show();
	}

	class MyTypeToken extends TypeToken<List<Student>>{
    	
    }
    
    //使用GSON解析一组json数据
    protected void json3() {
		String json = "[{\"id\":1,\"name\":\"tom\",\"sex\":\"男\",\"age\":18},{\"id\":2,\"name\":\"lily\",\"sex\":\"女\",\"age\":19}]";
		Gson gson = new Gson();
		Type type = new TypeToken<List<Student>>(){}.getType();
		
//		Type type = new MyTypeToken().getType();
		List<Student> list = gson.fromJson(json, type);
		
		//测试
		for (Student student : list) {
			Toast.makeText(this, student.toString(), Toast.LENGTH_SHORT).show();
		}
	}
	//使用GSON解析一个json数据
    protected void json2() {
		String json = "{\"id\":1,\"name\":\"tom\",\"sex\":\"男\",\"age\":18}";
		Gson gson = new Gson();
		Student s = gson.fromJson(json, Student.class);
		Toast.makeText(this, s.toString(), Toast.LENGTH_SHORT).show();
	}
	//使用JsonReader解析json数据
	protected void json1() {
		String json = "[{\"id\":1,\"name\":\"tom\",\"sex\":\"男\",\"age\":18},{\"id\":2,\"name\":\"lily\",\"sex\":\"女\",\"age\":19}]";
		//把字符串封装成一个字符流对象
		StringReader sr = new StringReader(json);
		//创建JSON解析器
		JsonReader reader = new JsonReader(sr);
		List<Student> list = new ArrayList<Student>();
		try {
			reader.beginArray();//开始解析数组
			while(reader.hasNext()){
				Student s = new Student();
				reader.beginObject();//开始解析对象
				while(reader.hasNext()){
					String name= reader.nextName();//获取当前对象属性名称
					if("id".equals(name)){
						s.setId(reader.nextInt());
					}else if("name".equals(name)){
						s.setName(reader.nextString());
					}else if("sex".equals(name)){
						s.setSex(reader.nextString());
					}else if("age".equals(name)){
						s.setAge(reader.nextInt());
					}
				}
				reader.endObject();//结束解析对象
				list.add(s);
			}
			reader.endArray();//结束解析数组
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		//测试输出
		for (Student student : list) {
			Toast.makeText(this, student.toString(), Toast.LENGTH_SHORT).show();
		}
	}
}


 

 

 

package com.vince.json;

public class Student {
	private int id;
	private String name;
	private String sex;
	private int age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", sex=" + sex
				+ ", age=" + age + "]";
	}
	public Student(int id, String name, String sex, int age) {
		super();
		this.id = id;
		this.name = name;
		this.sex = sex;
		this.age = age;
	}
	public Student() {
		super();
	}
}


 

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <Button
        android:id="@+id/button1_json1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="使用JsonReader解析json数据" />

    <Button
        android:id="@+id/button2_json2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="使用Gson解析单个json数据" />

    <Button
        android:id="@+id/button3_json3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="使用Gson解析多个json数据" />

    <Button
        android:id="@+id/button4_json4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="把一个对象转换成json数据" />

    <Button
        android:id="@+id/button5_json5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="把一组对象转换民json数据" />

</LinearLayout>


 

作者:zlQQhs 发表于2013-2-20 22:09:14 原文链接
阅读:64 评论:0 查看评论

相关 [android json 解析] 推荐:

Android中JSON解析

- - CSDN博客推荐文章
JSON是JavaScript Object Notation的缩写,可见JSON来源于JavaScript. JSON数据是一系列键值对的集合. JSON和JavaScript交互更加方便. JSON对数据的描述性没有XML好. JSON的速度要远远大于XML. JSON的解析要比XML的解析要方便.

Android--用JSON解析数据

- - CSDN博客移动开发推荐文章
gson-1.7.1.jar,Gson在Android3.0以上才能直接使用,在3.0以下想使用可以从外部导入jar包. 下载链接: http://download.csdn.net/detail/zlqqhs/5075995. 新建工程,新建一个libs文件夹,将gson-1.7.1.jar复制到libs文件夹中.

Android——JSON使用

- - CSDN博客推荐文章
        JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.  Name:Value  格式:. 一个object可以由一个或多个无序的这种组合 组成:. 2.有序的(array):. array 是 值(value) 的有序集合,格式:. array的值(alue) 可以是是双引号括起来的字符串(string)、数值(number)、 true、 false、  null、 对象(object)或者 数组(array).

iOS 中的JSON解析

- - ITeye博客
引用:http://blog.csdn.net/enuola/article/details/7903632        .  作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用http://www.bejson.com/网站来进行JSON格式化校验( 点击打开链接).

jquery JSON的解析方式

- - Web前端 - ITeye博客
第一次用JSON作为jquery异步请求的传输对象,结果在jquery请求后返回的结果是字符串还是json对象上折腾了半天. 等到问题解决了,也大致明白怎么个意思了,归根结底还是对jquery对相关json对象获取的理解有所偏差. 这里考虑都考虑的是服务器返回的是JSON形式的字符串的形式,对于利用JSONObject等插件封装的JSON对象,与此亦是大同小异,这里不再做说明.

GitHub - json-path/JsonPath: Java JsonPath implementation json 类xpath 解析工具

- -
JsonPath expressions always refer to a JSON structure in the same way as XPath expression are used in combination with an XML document. Functions can be invoked at the tail end of a path - the input to a function is the output of the path expression.

Google的GSON框架解析JSON数据

- - JavaScript - Web前端 - ITeye博客
JSON即JavaScript Object Natation, 它是一种轻量级的数据交换格式, 与XML一样, 是广泛被采用的客户端和服务端交互的解决方案. JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, key-value对之间使用逗号分隔.

eval解析JSON中的注意点

- - 互联网 - ITeye博客
源:http://www.cnblogs.com/myjavawork/articles/1979279.html. 在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式:. 1.一种为使用eval()函数. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery的each方法来遍历.

Json解析工具Jackson(使用注解)

- - 行业应用 - ITeye博客
       接上一篇文章 Json解析工具Jackson(简单应用),jackson在实际应用中给我们提供了一系列注解,提高了开发的灵活性,下面介绍一下最常用的一些注解.          此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响.

如何编写一个JSON解析器

- - IT技术博客大学习
标签:   JSON   解析器. 编写一个JSON解析器实际上就是一个函数,它的输入是一个表示JSON的字符串,输出是结构化的对应到语言本身的数据结构. 和XML相比,JSON本身结构非常简单,并且仅有几种数据类型,以Java为例,对应的数据结构是:. "string":Java的. true/false:Java的.