欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android 之 GSON解析JSON数据

程序员文章站 2022-03-02 19:36:37
...
                使用GSON 解析JSON 数据

1、GSON 的介绍:
    GSON 是一个JAVA 库,可用于将JAVA 对象转换称JSON,它也可以被用于将一个JSON 字符串转换为等效的Java对象。
    GSON 可以与任意Java对象,包括预先存在的对象或者你没有源代码结合。
    背景:已经有很多开源项目,可以转换Java对象到JSON。然而,他们中大多数要求在你的类上使用元注释 Annotation,如果你没有源码,将不能给代码加上Java这些元注解。大多数人也并不完全支持Java泛型的使用。GSON 认为这些是非常重要的设计目标;


2、用法准备:
    下载GsonAPI:google-gson-1.7.1-release.zip ; 并投入使用,怎么用大家都明白

3、解析JSON数据的两种方法:
   
    (1): 通过获取JsonReader对象解析JSON数据;
    (2): 通过把JSON数据映射成一个对象,使用Gson对象的fromJson()方法获取一个对象数组进行操作;


4、案例:
package com.example.file;

import java.io.StringReader;
import java.net.Proxy.Type;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import android.util.Log;

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

/**
 * GSON 解析 json 数据
 * @author Administrator
 *
 */
public class MyGson {

    /**
     * 使用JsonReader对象解析 JSON 数据
     * @throws Exception
     */
    public void jsonReader() throws Exception{
        String json = "[{\"name\":\"aa\",\"age\":20,\"score\":90},{\"name\":\"ff\",\"age\":21,\"score\":80}]";
        // 1、创建JsonReader 
        JsonReader reader = new JsonReader(new StringReader(json));
        reader.beginArray();
        while(reader.hasNext()){
            reader.beginObject();
            while(reader.hasNext()){
                String str = reader.nextName();
                if(str.equals("name")){
                    String name = reader.nextString();
                    Log.i("msg", "name:"+name);
                }
                if(str.equals("age")){
                    int age = reader.nextInt();
                    Log.i("msg", "age:"+age);
                }
                if(str.equals("score")){
                    int score = reader.nextInt();
                    Log.i("msg", "score:"+score);
                }
            }
            reader.endObject();
        }
        reader.endArray();
    }
    
    /**
     * 测试:
     * 把对象映射成JSON数据格式
     * java to json
     */
    public void tojson(){
    
        Student s1 = new Student("小黑",13, 90);
        Student s2 = new Student("小白",14, 70);
        Student s3 = new Student("小黄",15, 80);
        Student s4 = new Student("小绿",16, 100);
        List<Student> list = new ArrayList<Student>();
        list.add(s1);
        list.add(s2);
        list.add(s3);
        list.add(s4);
        Gson gson = new Gson();
        String s = gson.toJson(list);
        Log.i("msg", "对象映射称json格式为:"+s);
    }
    
    /**
     * 测试:
     * 通过把JSON 数据映成一个对象,使用GSON对象的fromJson()方法获取一个对象数组进行操作;
     * 
     * json to java
     * 
     * 如果要处理的JSON字符串只包含一个JSON 对象,则可以直接使用fromJson获取一个对象
     */
    public void fromjson(){
        Gson gson = new Gson();
        // 单个对象的操作
        String strjson = "{"+"\"name\":\"aa\",\"score\":90,\"age\":12"+"}";
        Student stu = gson.fromJson(strjson, Student.class); // 映射获取数据
        Log.i("msg", "姓名:"+stu.getName()+",年龄:"+stu.getAge());
        
        /* 多个对象的操作 */
        String json = "[{\"name\":\"aa\",\"age\":20,\"score\":90}," +
                "{\"name\":\"ff\",\"age\":21,\"score\":80}]";
        java.lang.reflect.Type listType = new TypeToken<LinkedList<Student>>(){}.getType();
        Gson gson1 = new Gson();
        LinkedList<Student> stus = gson1.fromJson(json, listType);
        for(Iterator  iterator=stus.iterator();iterator.hasNext();){
            Student st = (Student) iterator.next();
            Log.i("msg",st.getName());
        }
        
    }
}


使用GSON 解析 json数据必须用到一个jar包,下载jar包和源码地址: