一、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;
}
}