Android JSON解析库的使用

可紊 提交于 2020-01-13 00:30:24

一、Json:

首先回顾下JSON的基本概念,JSON是一种轻量级的数据交换格式。用于数据转换传输,通用与PHP、JAVA、C++、C#、Pyth等编程语言数据交换传输。

易于阅读和编写,同时也易于解析和生成。

基本结构:对象、数组。

二、Gson的简介和特点:

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

  • 快速、高效
  • 代码量少、简洁
  • 面向对象
  • 数据传递和解析方便
三、Fast-json简介和特点
1、Fastjson是一个性能很好的java语言实现的JSON解析器和生成器,来自于阿里巴巴的工程师开发。具有极快的性能,超越其他的Java Json Patser。
  • 快速FAST(比其他任何基于Java的解析器和生成器更快
  • 强大(支持普通的JDK类包括任意Java Bean Class、Collection、Map、Date或enum)
  • 零依赖
  • 支持注解、支持全类型序列化。
2、基本用法:
  • 定义实体类
  • 根据需要可以将JSON生成单个实体或者列表实体集合
四、代码演示:

package com.jike.jsondemo;

import java.util.ArrayList;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;

import com.alibaba.fastjson.JSON;
import com.android.volley.Response;
import com.android.volley.Response.Listener;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.jike.jsondemo.adapter.BookListAdapter;
import com.jike.jsondemo.bean.Book;

/**
 * Gson 和 Fast-json 的实际应用案例
 * 
 * @author Administrator 图书列表
 */
public class MainActivity extends Activity {
	private String url = "http://apis.juhe.cn/goodbook/catalog?key=a2ac7f8df926e8d5d7cc978ca0f1b12b&dtype=json";
	private ListView lv;
	private BookListAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		lv = (ListView) this.findViewById(R.id.lv);
		getData();
	}

	private void getData() {
		StringRequest request = new StringRequest(url, new Listener<String>() {

			@Override
			public void onResponse(String arg0) {
				Log.i("info", arg0);
				try {
					dealData(arg0);
				} catch (JSONException e) {
					e.printStackTrace();
				}
			}

		}, new Response.ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError arg0) {

			}
		});
		Volley.newRequestQueue(getApplicationContext()).add(request);
	}

	private void dealData(String arg0) throws JSONException {

		/*
		 * 使用GSON解析数据
		Gson gson = new Gson();
		Type listType = new TypeToken<ArrayList<Book>>() {
		}.getType();
		JSONObject object = new JSONObject(arg0);
		ArrayList<Book> books = gson.fromJson(object.getString("result"),listType);
		adapter = new BookListAdapter(this, books);
		lv.setAdapter(adapter);
		 */
		
		/*
		 * 使用FastJson解析数据
		 */
		JSONObject object = new JSONObject(arg0);
		ArrayList<Book> books = (ArrayList<Book>) JSON.parseArray(object.getString("result"), Book.class);
		adapter = new BookListAdapter(this, books);
		lv.setAdapter(adapter);
	}
}
BookListAdapter.java:
package com.jike.jsondemo.adapter;

import java.util.ArrayList;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.jike.jsondemo.R;
import com.jike.jsondemo.bean.Book;

public class BookListAdapter extends BaseAdapter {
	private Context c;
	private ArrayList<Book> list;

	public BookListAdapter(Context context, ArrayList<Book> books) {
		this.c = context;
		this.list = books;
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return list.size();
	}

	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return list.get(arg0);
	}

	@Override
	public long getItemId(int arg0) {
		// TODO Auto-generated method stub
		return arg0;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder holder = null;
		if (convertView == null) {
			convertView = View.inflate(c, R.layout.item_list, null);
			holder = new ViewHolder();
			holder.tv = (TextView) convertView.findViewById(R.id.tv);
			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}
		Book b = list.get(position);
		holder.tv.setText(b.getCatlog() + "\n" + b.getId());
		return convertView;
	}

	class ViewHolder {
		TextView tv;
	}

}
Book.java:
package com.jike.jsondemo.bean;

public class Book {
	private String id;
	private String catlog;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getCatlog() {
		return catlog;
	}

	public void setCatlog(String catlog) {
		this.catlog = catlog;
	}

}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!