Android中JSON的解析

1、概述

什么是JSON(JavaScript Object Notation)?一种轻量级的数据交换格式。特点:可读性强,传输效率高,数据体积小,描述性相对较差。
JSON更加适用于移动设备,尤其对于网络环境较差和流量限制的情况下,相对于XML格式的数据传输会更节省流量,传输效率更高。
JSON语法:

  • 数据在键值对中 “key”:“value”
  • 数据由逗号分隔
  • 花括号保存对象 {,}
  • 方括号保存数组 [,]

相关类及方法:在org.json.*;包中
JSONObject;
JSONArray;

	optXXX(xxx,xxx);//获取某属性,有这个则返回这个属性,否则返回一个默认值
	getXXX(xxx);//获取某属性值
	put(xxx, xxx);//设置数据
	has(xxx);//判断是否有某属性

JSON解析方式:

  • 顺序解析
  • 普通解析
  • 框架解析
    1.GSON
    2.FastJson

###2、顺序解析
由于这种解析方式比较繁琐不适用json串比较大的数据,因此现在用的很少了。
JSON数据:整体是个JSON数组

[
  {
    "name": "yiyi",
    "age": 11
  },
  {
    "name": "erer",
    "age": 22
  }
]
	String s = "[{\"name\":\"yiyi\",\"age\":11},{\"name\":\"erer\",\"age\":22}]";

	/**
	 * 比较古老的方式不建议使用
	 * 
	 * @param s
	 * @throws IOException
	 */
	@SuppressWarnings("resource")
	public void jxJson(String s) throws IOException {
		// 生成JsonReader对象
		JsonReader reader = new JsonReader(new StringReader(s));
		// 开始解析json数组
		reader.beginArray();
		// 判断json数组是否还有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 {
					System.out.println("age:" + reader.nextInt());
				}
			}
			// 解析对象结束
			reader.endObject();
		}
		// 解析数组结束
		reader.endArray();
	}

输出结果:
这里写图片描述

通过代码可以看出整体解析过程和json串格式是一致的,按顺序执行,因此被我称为顺序解析。(若有问题,肯请指正)

3、普通解析

JSON数据:整体是个JSON对象

{
  "user": [
    {
      "name": "yiyi",
      "age": 11
    },
    {
      "name": "erer",
      "age": 22
    }
  ],
  "code": [
    "Android",
    "Ios",
    "Php",
    "Web"
  ]
}
	/**
	 * JSON普通解析
	 */
	private void jxJson() throws JSONException {

		String s = "{\"user\": [{\"name\": \"yiyi\",\"age\": 11},{\"name\": \"erer\",\"age\": 22}],\"code\": [\"Android\",\"Ios\",\"Php\",\"Web\"]}";

		JSONObject jsonObject = new JSONObject(s);
		JSONArray user = jsonObject.getJSONArray("user");
		JSONArray code = jsonObject.getJSONArray("code");

		for (int i = 0; i < user.length(); i++) {
			String name = user.getJSONObject(i).getString("name");
			int age = user.getJSONObject(i).getInt("age");
			System.out.println("name:" + name + " age:" + age);
		}

		for (int i = 0; i < code.length(); i++) {
			System.out.println("code:" + code.get(i));
		}

	}

输出结果:
这里写图片描述

4、框架解析

1.GSON

Gson是Google提供的用来在Java对象和JSON数据之间进行映射的框架。可以将一个JSON字符串转成一个Java对象,或者反过来。

Gson gson = new Gson();
gson.fromJson(xxx, xxx);// json映射对象
gson.toJson(xxx);// 对象转化为jso字符串   
   	/**
	 * 解析json数据并映射成为一个对象
	 */
	String s = "{\"name\":\"yiyi\",\"age\":11}";

	public void jxJson(String s) {
		Gson gson = new Gson();
		// 映射对象
		User user = gson.fromJson(s, User.class);
		System.out.println("name:" + user.getName());
		System.out.println("age:" + user.getAge());
	}
   
   	class User {
	String name;
	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;
	}

输出结果:
这里写图片描述

   	/**
	 * 解析json数组并映射成为对象集合
	 */
	String s = "[{\"name\":\"yiyi\",\"age\":11},{\"name\":\"erer\",\"age\":22}]";

	public void jxJson(String s) {
		Type type = new TypeToken<LinkedList<User>>() {}.getType();
		Gson gson = new Gson();
		LinkedList<User> users = gson.fromJson(s, type);
		for (User user : users) {
			System.out.println("name:" + user.getName());
			System.out.println("age:" + user.getAge());
		}
	}

输出结果:
这里写图片描述

如果使用Android Studio开发可下载GsonFormat插件,通过该插件把JSON数据映射成实体类。

2.FastJson

FastJson是阿里巴巴开源的一个性能很好的Java语言实现的JSON解析器和生成器框架。
未完待续…

路虽远,行则将至。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值