Json数据解析

  本篇介绍一下android中的json数据解析。
  首先,我们要介绍一下Gson解析json的原理。
  eg.
"[{"name":"kevin","age":25},{"name":"cissy","age":24}]";
这是一个json数组。解析的流程:
  1. 碰到"[",开始解析Json数组。
  2. 碰到"{",开始解析Json对象。
  3. 解析Json对象里面的值。
  4. 碰到"}",解析Json对象结束。
  5. 碰到"]",解析Json数组结束。
  另外Gson可以直接解析Json数组或者对象到你自定义的一个对象,这里我就多作解释了。代码里注释写的很清楚。
  代码如下:
 
package com.kevin.json;

import java.io.IOException;
import java.io.StringReader;
import java.lang.reflect.Type;
import java.util.Iterator;
import java.util.LinkedList;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;

public class JsonUtils {
	public void parseJson(String jsonData){
		// 解析JSON数据,首先要创建一个JsonReader对象
		JsonReader reader = new JsonReader(new StringReader(jsonData));
		try {
			// 开始解析JSON数组
			reader.beginArray();
			// 循环读取JSON中的数组
			while(reader.hasNext()){
				// 开始解析JSON数组里的对象
				reader.beginObject();
				// 循环读取JSON数组中的对象
				while(reader.hasNext()){
					String tagName = reader.nextName();
					if(tagName.equals("name")){
						System.out.println("name---->" + reader.nextString());
					}
					else if(tagName.equals("age")){
						System.out.println("age---->" + reader.nextInt());
					}
				}
				reader.endObject();
			}
			reader.endArray();
		} catch (IOException e) {
			e.printStackTrace();
		}	
	}
	public void parseUserFromJson(String jsonData){
		// 解析json对象并赋值给User对象
		Gson gson = new Gson();
		User user = gson.fromJson(jsonData, User.class);
		System.out.println("name---->" + user.getName());
		System.out.println("age---->" + user.getAge());
	}
	// 解析JSON数组并赋值给User对象
	public void parseUserArrayFromJson(String jsonData){
		// 取得该类型的实体
		Type listType = new TypeToken<LinkedList<User>>(){}.getType();
		Gson gson = new Gson();
		LinkedList<User> users = gson.fromJson(jsonData, listType);
		for(Iterator<User> iterator = users.iterator(); iterator.hasNext();){
			User user = (User)iterator.next();
			System.out.println("name---->" + user.getName());
			System.out.println("age---->" + user.getAge());
		}
	}
}

全部代码已上传。

你可能感兴趣的:(android)