一步一步的学习android应用开发到系统底层开发之android数据解析JSON篇

原创 2012年03月30日 17:44:30

Json的定义:

是一种轻量级的数据交互格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,详见官网网址:http://json.org/。

我们主要关系的是android 为我们提供了那些解析JSON常用的类:

JSONArray:

     它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔。例如:

{"employees": [{ "firstName":"Bill" , "lastName":"Gates" },{ "firstName":"George" , "lastName":"Bush" },{ "firstName":"Thomas" , "lastName":"Carter" }]}


JSONObject:
      可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。
JSONStringer:

      json文本构建类 ,根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。其最大的优点在于可以减少由于 格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。。其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。

Json 数据的基本转换:

package com.lupeng.javase.json.test;

import java.text.DateFormat;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.lupeng.javase.json.bean.DateBean;
import com.lupeng.javase.json.bean.JavaBean;
import com.lupeng.javase.json.util.DateDeserializerUtils;
import com.lupeng.javase.json.util.DateSerializerUtils;

@SuppressWarnings("unchecked")
public class GsonTester {
	private static Gson gson = null;
	private static GsonBuilder gsonBuilder = null;

	public static void setUp() {
		gson = new Gson();
		gsonBuilder = new GsonBuilder();
	}

	/**
	 * JavaBean、Json相互转换
	 */

	public void testBeanJson() {
		JavaBean bean = new JavaBean("1001", "scott", 20, "TL");

		// Bean -> Json
		String json = gson.toJson(bean);
		System.out.println(json);

		// Json -> Bean
		bean = gson.fromJson(json, JavaBean.class);
		System.out.println(bean);
	}

	/**
	 * List转换成Json字符串
	 */

	public void testList2Json() {
		// List
		List list = new ArrayList();
		for (int i = 0; i < 5; i++) {
			list.add("element" + i);
		}
		System.out.println(list);

		// List -> Json
		String json = gson.toJson(list);
		System.out.println(json);
	}

	/**
	 * 泛型List、Json相互转换
	 */

	public void testGenericListJson() {
		// 泛型List
		List<JavaBean> list = new ArrayList<JavaBean>();
		for (int i = 0; i < 3; i++) {
			JavaBean user = new JavaBean("100" + i, "name" + i, 20 + i, "BJ"
					+ i);
			list.add(user);
		}
		System.out.println(list);

		// 泛型List -> Json
		java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<List<JavaBean>>() {
		}.getType();
		String json = gson.toJson(list, type);
		System.out.println(json);

		// Json -> 泛型List
		List<JavaBean> users = gson.fromJson(json.toString(), type);
		System.out.println(users);
	}

	/**
	 * Map转换成Json字符串
	 */

	public void testMap2Json() {
		// Map数据
		Map map = new HashMap();
		map.put("id", "1001");
		map.put("name", "scott");
		map.put("age", 20);
		map.put("addr", "BJ");
		System.out.println(map);

		// Map -> Json
		String json = gson.toJson(map);
		System.out.println(json);
	}

	/**
	 * 泛型Map、Json相互转换
	 */

	public void testGenericMapJson() {
		// 泛型Map数据
		Map<String, JavaBean> map = new HashMap<String, JavaBean>();
		for (int i = 0; i < 5; i++) {
			JavaBean user = new JavaBean("100" + i, "name" + i, 20 + i, "LN"
					+ i);
			map.put("100" + i, user);
		}
		System.out.println(map);

		// 泛型Map -> Json
		java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<Map<String, JavaBean>>() {
		}.getType();
		String json = gson.toJson(map, type);
		System.out.println(json);

		// Json -> Map
		Map<String, JavaBean> users = gson.fromJson(json.toString(), type);
		System.out.println(users);

	}

	/**
	 * 带日期类型Bean、Json相互转换
	 */

	public static void testDateBeanJson() {
		// 日期Bean数据
		DateBean bean = new DateBean("1001", "scott", 20, new Date());

		// Bean(带日期属性) -> Json
		gson = gsonBuilder.registerTypeAdapter(java.util.Date.class,
						new DateSerializerUtils())
				.setDateFormat(DateFormat.LONG).create();
		String json = gson.toJson(bean);
		System.out.println(json);
		// Json -> Bean(带日期类型属性)
		gson = gsonBuilder
				.registerTypeAdapter(java.util.Date.class,
						new DateDeserializerUtils())
				.setDateFormat(DateFormat.LONG).create();
		java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<DateBean>() {
		}.getType();
		DateBean b = gson.fromJson(json, type);
		System.out.println(b);
	}

	/**
	 * 泛型日期List、Json相互转换
	 */

	public static void testDateGenericListJson() {
		// 泛型日期List
		List<DateBean> list = new ArrayList<DateBean>();
		for (int i = 0; i < 3; i++) {
			DateBean user = new DateBean("100" + i, "name" + i, 20 + i,
					new Date());
			list.add(user);
		}
		System.out.println(list);

		// 泛型日期List -> Json
		gson = gsonBuilder
				.registerTypeAdapter(java.util.Date.class,
						new DateSerializerUtils())
				.setDateFormat(DateFormat.LONG).create();
		java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<List<DateBean>>() {
		}.getType();
		String json = gson.toJson(list, type);
		System.out.println(json);

		// Json -> 泛型日期List
		gson = gsonBuilder
				.registerTypeAdapter(java.util.Date.class,
						new DateDeserializerUtils())
				.setDateFormat(DateFormat.LONG).create();
		List<DateBean> users = gson.fromJson(json.toString(), type);
		System.out.println(users);
	}

	public static void main(String[] args) {

		SimpleDateFormat foo = new SimpleDateFormat();
		System.out.println("foo:" + foo.format(new Date()));

		Calendar gc = GregorianCalendar.getInstance();
		System.out.println("gc.getTime():" + gc.getTime());
		System.out.println("gc.getTimeInMillis():"
				+ new Date(gc.getTimeInMillis()));
		setUp();
		testDateBeanJson();
		testDateGenericListJson();
	}
}

JsonDeserializer 日期序列化问题:

public class DateDeserializer implements JsonDeserializer<Date> {
	public Date deserialize(JsonElement json, Type typeOfT,
			JsonDeserializationContext context) throws JsonParseException {
		String JSONDateToMilliseconds = "\\/(Date\\((.*?)(\\+.*)?\\))\\/";
		Pattern pattern = Pattern.compile(JSONDateToMilliseconds);
		Matcher matcher = pattern.matcher(json.getAsJsonPrimitive().getAsString());
		String result = matcher.replaceAll("$2");
		return new Date(new Long(result));
	}

(带更新................................)

相关文章推荐

一步一步的学习android应用开发到系统底层开发之android开发层次及所需技术

一、Android开发的分类: 1、Android客户端应用程序     如新浪微博、网银客户端、凡客、淘宝客户端,快盘客户端。从应用需求上来讲,几乎大一点的网站,都需要有手机客户端程序。 2、...

【Android应用开发】-(17)获取Google天气预报通过Xml和JSON解析数据

最近在做一个天气预报的Widget,通过google提供的api可以查询全世界的天气情况,这篇文章主要讲述如何通过Android的JSON获取城市的经纬度,程序很简单。稍后我将demo供来此博客的朋友...

Android应用开发------------Json工具类(fastJson和Gson的两种工具类)

json一般是Android中比较常用的与服务器交互的数据形式。我们常用的架包来解析json字符串有fastjson和gson 分别下了两个工具类: fastJson import java.util...
  • ls703
  • ls703
  • 2014年12月09日 12:17
  • 2622

Android应用开发---listview长按删除该Item数据并删除所在数据库的记录

1、先看下listview适配器 mlistItemAdapter = new SimpleAdapter( getApplicationContext(), mlistItem,/...
  • Moruna
  • Moruna
  • 2012年08月12日 19:24
  • 30399

Android应用开发SharedPreferences存储数据的使用方法

SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-value(键值对)SharedPreferences常用来...

Android应用开发之获取网络数据

J2SE实现网络图片的获取 [html] view plaincopy public static void main(String[] args) t...

Android应用开发:Fragment与大型数据缓存

引言在Android应用开发:Fragment的非中断保存setRetaineInstance一文中已经介绍过了如何让Fragment不随着Activity销毁从而保存数据的方法。在移动应用程序的架构...

Android应用开发SharedPreferences存储数据的使用方法

SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-value(键值对)。SharedPreferences常用...

在Windows系统中使用C++进行Android应用开发的环境搭建

引言:虽然Android应用的主流开发语言是Java,但是使用C/C++语言进行开发也是可行的,虽然还仅限于用C/C++语言进行开发二进制动态库.so; 所以我们的基本思路就是:从创建一个标准的Jav...

Android应用开发-学生信息管理系统

设计目的1、网上很少有关于SQLite简单综合项目的测试APP。 2、把自己所学的部分UI综合一下,希望能给新手一些帮助。涉及知识点1、包括SQLite的增删查找等功能。查找中加入了“模糊搜索”的功...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一步一步的学习android应用开发到系统底层开发之android数据解析JSON篇
举报原因:
原因补充:

(最多只允许输入30个字)