Android Json解析方法

来源:互联网 发布:全新硬盘重装mac系统 编辑:程序博客网 时间:2024/06/11 19:37

1、Json:JavaScript Object Notation

2、Json数据是一系列的键值对集合,相对XML体积小

3、Json相对于XML解析方便一些,与JavaScript交互方便

4、描述性相对XML较差

Json格式例子:

[{"name":"zhangsan","age":20},{"name":"lisi","age":21}]

Json介绍:http://baike.baidu.com/view/136475.htm

Json官网:http://www.json.org/

解析方法:

1、使用Android官方API :JsonReader (Added in API level 11)

http://developer.android.com/reference/android/util/JsonReader.html

2、使用Google的Json解析插件:Gson (推荐)

http://code.google.com/p/google-gson/

   Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。

 a、使用JsonReader解析,类似Android官方API

 b、使用Gson的API直接转对象或对象的列表

Gson使用例子代码:

Json解析工具类:

package com.wyy.json.util;import java.lang.reflect.Type;import java.util.List;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;/***************************************************************** *@ProjectName AboutJson *@FileName JsonUtil.java *@Author WYY *@Date 2013-6-14 *@Copyright 2012-2022  wyyft@163.com All rights reserved. * *****************************************************************//** * @Author WYY * @Description */public class JsonUtil{    private static JsonUtil  instance;    private Gson gson = new Gson();       /**     * @Description 获取JsonUtil的单例对象     * @modified by WYY 2013-6-14     * @return     */    public static JsonUtil newInstance()    {        if (instance == null)        {            instance = new JsonUtil();        }        return instance;    }    /**     * 解析单个对象     *      * @Description     * @modified by WYY 2013-6-14     * @param jsonData     * @return     */    public Person parsePerson(String jsonData)    {        Person person = gson.fromJson(jsonData, Person.class);        return person;    }    /**     * @Description 解析多个对象组成的数组     * @modified by WYY 2013-6-14     * @param jsonData     * @return     */    public List<Person> parsePersons(String jsonData)    {        Type type = new TypeToken<List<Person>>()        {        }.getType();        List<Person> ps = gson.fromJson(jsonData, type);        return ps;    }}

实体类Person:

/***************************************************************** *@ProjectName AboutJson *@FileName Person.java *@Author WYY *@Date 2013-6-14 *@Copyright 2012-2022  wyyft@163.com All rights reserved. * *****************************************************************/package com.wyy.json.util;/** * @Author WYY * @Description */public class Person{    private String name;    private int age;    public String getName()    {        return name;    }    public void setName(String name)    {        this.name = name;    }    public int getAge()    {        return age;    }    public void setAge(int age)    {        this.age = age;    }    @Override    public String toString()    {        return "Person [name=" + name + ", age=" + age + "]";    }}

测试数据:

/***************************************************************** *@ProjectName AboutJson *@FileName JsonData.java *@Author WYY *@Date 2013-6-14 *@Copyright 2012-2022  wyyft@163.com All rights reserved. * *****************************************************************/package com.wyy.json.util;/** * @Author WYY * @Description  */public class JsonData{    //测试数据    static String jsonString1="{\"name\":\"zhangsan\",\"age\":20}";    static String jsonString2="[{\"name\":\"zhangsan\",\"age\":20},{\"name\":\"lisi\",\"age\":21}]";}

测试类:

/***************************************************************** *@ProjectName AboutJson *@FileName Tester.java *@Author WYY *@Date 2013-6-14 *@Copyright 2012-2022  wyyft@163.com All rights reserved. * *****************************************************************/package com.wyy.json.util;import java.util.List;/** * @Author WYY * @Description  */public class Tester{    public static void main(String[] args)    {        JsonUtil jsonUtil =JsonUtil.newInstance();        Person person =jsonUtil.parsePerson(JsonData.jsonString1);        System.out.println(person);                List<Person> psList = jsonUtil.parsePersons(JsonData.jsonString2);        System.out.println(psList);    }}