Android中JSON数据解析

本文介绍了JSON数据格式的特点及优势,并通过实例演示了如何使用Google的Gson库在Java中解析复杂的JSON数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值