Android中JSON数据解析

来源:互联网 发布:大数据技术体系 编辑:程序博客网 时间:2024/04/28 18:17

     JSON 是JavaScript Object  Notation 的缩写,是一种轻量级的数据交换格式。JSON是一系列键值的组合,JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。

     JSON相对于XML来说,在网路上传输同等价值的数据,体积要更小。这使得JSON在手机网络应用开发上被广泛应用。在这里以Android为例,来初步研究一下JSON的解析。

 

一、JSON表达式简介

1.JSON基本表达形式

按照最简单的形式,可以用下面这样的 JSON 表示名称 / 值对:

  { "Name": "wangbing" }

JSON支持对象的嵌套,如:

{"Student":

       { "Name": "wangbing" } ,

  "Student_id":21332}

 

2.JSON的数组表示
  当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在 XML 中,需要许多开始标记和结束标记;如果使用典型的名称 / 值对(就像在本系列前面文章中看到的那种名称 / 值对),那么必须建立一种专有的数据格式,或者将键名称修改为 person1-firstName这样的形式。如果使用 JSON,就只需将多个带花括号的记录分组在一起:   

{ "people": [   

        { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },   

        { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},   

       { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }   

]}

 

二、Gson介绍

Gson是google开发的一个Java对象与JSON相互转化的工具包。

使用Gson对象进行JSON数据的相互转化,主要依赖于类Gson的两个函数

toJson() 和fromJson()。

 

1.对于简单的数据结构可以参考下面的写法.

Gson gson = new Gson(); // Or use new GsonBuilder().create();

MyType target = new MyType();

String json = gson.toJson(target); // serializes target to Json

MyType target2 = gson.fromJson(json, MyType.class); // deserializes json into target2

 

2.对于数组类的JSON数据可以参考下面写法.

Type listType = new TypeToken<List<String>>() {}.getType();

List<String> target = new LinkedList<String>();

target.add("blah");

Gson gson = new Gson();

String json = gson.toJson(target, listType);

List<String> target2 = gson.fromJson(json, listType);

 

三、用Gson解析JSON数据包举例。

 

package com.huchun.appgson;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class AppGsonActivity extends Activity {
 
 private String JsonData="[{\"name\":\"tom\",\"age\":30},{\"name\":\"michael\",\"age\":40}]";
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        Button parse = (Button) findViewById(R.id.parsejson);
        parse.setOnClickListener(parseListener);
    }
   
 private OnClickListener parseListener = new OnClickListener() {
  public void onClick(View v) {
   // TODO Auto-generated method stub
   
   new JsonUtil().parseJson(JsonData);

  }
 };    
   
}

 

 

package com.huchun.appgson;

import java.lang.reflect.Type;
import java.util.Iterator;
import java.util.LinkedList;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class JsonUtil {
 public void parseJson(String json){
  Type listType=new TypeToken<LinkedList<Staff>>(){}.getType();
  Gson gson=new Gson();
  
  LinkedList<Staff> staffs=gson.fromJson(json, listType);
  
  for(Iterator<Staff> iterator=staffs.iterator();iterator.hasNext(); ){
   Staff staff=(Staff)iterator.next();
   System.out.println("name -->"+staff.getName());
   System.out.println("age  -->"+staff.getAge() );
   
  }
  
 }

}

 

 

package com.huchun.appgson;

public class Staff {

 private String name;
 private Integer age;
 
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public Integer getAge() {
  return age;
 }
 public void setAge(Integer age) {
  this.age = age;
 }


}