下载 google-gson-2.2.4-release.zip
解压把gson-2.2.4.jar 复制到项目根目录libs文件夹中即可。
先看解析后效果图,用ListView展示
package com.example.bottomui; import java.io.IOException; import java.io.StringReader; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.ListView; import android.widget.SimpleAdapter; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; public class JsonDemo extends Activity { private String jsonData = "[{\"name\":\"小明\",\"age\":28}" + ",{\"name\":\"小红\",\"age\":23}" + ",{\"name\":\"小李\",\"age\":23}" + ",{\"name\":\"小林\",\"age\":23}" + ",{\"name\":\"小狗\",\"age\":20}" + ",{\"name\":\"小猫\",\"age\":23}" + ",{\"name\":\"小熊\",\"age\":23}" + ",{\"name\":\"没得小了\",\"age\":23}]"; private SimpleAdapter adapter; ListView lv =null; List<Map<String, Object>> jsonlist; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.jsondemo); lv = (ListView) this.findViewById(R.id.jsonlist); jsonlist = new ArrayList<Map<String, Object>>(); //1.把JSON数据映射成一个对象,使用Gson对象的fromJson()方法获取一个对象数组 Type listType = new TypeToken<LinkedList<Customer>>() {}.getType(); Gson gson = new Gson(); LinkedList<Customer> users = gson.fromJson(jsonData, listType); for (Iterator<Customer> iterator = users.iterator(); iterator.hasNext();) { Customer user = (Customer) iterator.next(); Log.i("username", "name--------->" + user.getName()); Log.i("userage", "age--------->" + user.getAge()); Map<String, Object> map = new HashMap<String, Object>(); map.put("sItemTitle", user.getName()); map.put("sItemInfo", user.getAge()); // list.add(map); jsonlist.add(map); } adapter = new SimpleAdapter(this, jsonlist, R.layout.jsonitem, new String[] { "sItemTitle", "sItemInfo" }, new int[] { R.id.sItemTitle, R.id.sItemInfo }); lv.setAdapter(adapter); //2.通过获取JsonReader对象解析JSON数据 JsonReader reader = new JsonReader(new StringReader(jsonData)); try { reader.beginArray();// 解析数组 while (reader.hasNext()) { reader.beginObject(); // 解析对象 while (reader.hasNext()) { String tagName = reader.nextName(); // 键值对中的key if (tagName.equals("name")) { // key为name Log.i("username", "name--------->" + reader.nextString()); // key中的内容 } else if (tagName.equals("age")) { // key为age Log.i("userage", "age--------->" + reader.nextInt()); // key中的内容 } } reader.endObject(); } reader.endArray(); } catch (IOException e) { e.printStackTrace(); } } }
经典的小明,小红手牵手上学的场面出现了。解析完毕!
相关两份XML文件:Jsondemo.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#f5f5f5" > <LinearLayout android:id="@+id/json_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dip" android:layout_marginBottom="10dip" android:layout_marginTop="10.0dip" android:background="@color/white" android:gravity="center|center_horizontal|center_vertical" > <ListView android:id="@+id/jsonlist" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="10dip" android:cacheColorHint="#00000000" android:fadingEdge="none" android:listSelector="#00000000" android:paddingTop="5dip" > </ListView> </LinearLayout> </RelativeLayout>Jsonitem.xml
<?xml version="1.0" encoding="UTF-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="30.0dip" android:drawingCacheQuality="high" android:minHeight="30.0dip" android:orientation="horizontal" > <ImageView android:id="@+id/sItemIcon" android:layout_width="0dip" android:layout_height="0dip" android:layout_margin="1.0dip" android:padding="2.0dip" android:scaleType="fitXY" /> <TextView android:id="@+id/sItemTitle" android:layout_width="fill_parent" android:layout_height="20.0dip" android:layout_alignTop="@+id/sItemIcon" android:layout_toRightOf="@+id/sItemIcon" android:gravity="center_vertical" android:singleLine="true" android:text="lvshou" android:textSize="13.0sp" /> <TextView android:id="@+id/sItemInfo" android:layout_width="fill_parent" android:layout_height="0.0dip" android:layout_below="@id/sItemTitle" android:layout_toRightOf="@id/sItemIcon" android:ellipsize="marquee" android:gravity="center_vertical" android:singleLine="true" android:textSize="13.0sp" /> </RelativeLayout>