Android解析json数据(Gson)

json结构: 所有的数据(data)最终都可以分解成三种类型:
标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"广州"这个单独的词。
序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"广州,上海"。
 映射(mapping),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比如"广东省会:广州"。
Json相关规定:
  并列的数据之间用逗号(",")分隔。
  映射用冒号(":")表示。
  映射的集合(对象)用大括号("{}")表示。
  并列数据的集合(数组)用方括号("[]")表示。 

下载 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();
           }
    }
}


在LogCat 输出查看结果:

经典的小明,小红手牵手上学的场面出现了。解析完毕!
相关两份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>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值