一步一步的学习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));
	}

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

一步一步学ROP之linux_x86篇

0x00    本文仅解释说明蒸米大神一步一步学ROP之linux_x86篇,读者应先阅读这篇文章,遇到问题再来看我这篇文章。    阅读完这两篇文章后,我们会理解ROP(返回导向编程),DEP(堆栈...
  • jltxgcy
  • jltxgcy
  • 2016年02月19日 11:16
  • 2446

一步一步学ROP之Android ARM 32位篇

0x00    本文仅解释说明蒸米大神一步一步学ROP之Android ARM 32位篇,读者应先阅读这篇文章,遇到问题再来看我这篇文章。   0x01    第一个问题:payload = 'A'*...
  • jltxgcy
  • jltxgcy
  • 2016年02月19日 17:48
  • 1955

Android 从硬件到应用:一步一步向上爬 2 -- 运行 C 程序测试硬件驱动

编写C程序快速测试硬件驱动: 在Android 源码根目录下的external文件夹创建driver_test文件夹: cd external mkdir driver_test cd dri...
  • wu20093346
  • wu20093346
  • 2014年12月12日 20:53
  • 1692

一步一步跟我学hadoop(1)----hadoop概述和安装配置

这几年云计算大数据很火,借这个东风,今天开始学习apache的分布式计算框架hadoop,希望不要太落后。 Apache Hadoop是一个在大型集群的商品硬件上运行的应用程序的框架。Hadoop框架...
  • wuyinggui10000
  • wuyinggui10000
  • 2015年07月05日 23:08
  • 2326

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

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

一步一步学MySQL----2 数据库基本操作

2.1 数据库和数据库对象在MySQL中,数据库分为系统数据库和用户数据库。系统数据库是指安装完MySQL后,附带的一些数据库,如下图所示 注意:系统数据库会记录一些必须的信息,用户不能直接修改这些...
  • u013003827
  • u013003827
  • 2017年03月09日 19:52
  • 296

教你搞定IOS远程消息推送APNS

一、引言 IOS中消息的推送有两种方式,分别是本地推送和远程推送,本地推送在http://blog.csdn.net/jaccty/article/details/47429617这篇博客中有详...
  • jaccty
  • jaccty
  • 2015年08月23日 17:02
  • 383

Android从零开始之一步一步教你实现联系人功能(一)

在最近的项目中有这样的一个需求,就是要实现类似联系人的列表,包含模糊查询、按照A到Z拼音首字母分组排序、和收藏功能。参考了一下网上的例子,我觉得还是自己亲自操刀来实现所有的功能。今天带领大家先实现联系...
  • Poison_H
  • Poison_H
  • 2016年07月10日 14:52
  • 1822

一步一步循序渐进学习TP一(新手篇)

前言TP的手册相当多,其实不必再出这样的贴子,论技术,我也是菜鸟一个,同时也在学习当中。看到论坛上多了不少新朋友,不少在抱怨手册看不懂,那我就姑且抛砖引玉,尝试与新朋友们更简单地、手把手地进入TP的应...
  • ivykid2002
  • ivykid2002
  • 2010年09月15日 14:49
  • 1871

一步一步学做一个CPU——1,准备工作

一,准备工作 参考: 罗老板的计算机结构与组成课程 http://xgxy.cug.edu.cn/rjgcx/lzw/COD/ Machine Structures. Spri...
  • wyq120547
  • wyq120547
  • 2014年06月17日 12:05
  • 1339
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一步一步的学习android应用开发到系统底层开发之android数据解析JSON篇
举报原因:
原因补充:

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