Android Json解析

来源:互联网 发布:uc矩阵子系统划分例题 编辑:程序博客网 时间:2024/05/29 13:04

JSON(JavaScript Object Notation)是一种轻量级数据交换格式基本结构有对象(JsonObject)、数组(JsonArray)。
Gson是谷歌提供的一个面向对象用来可以快速高效在Java对象和JSON数据之间进行映射的java类库。可以将一个JSON字符串转成一个Java对象,也可以将一个Java对象转换成一个JSON字符串。
Fast-json是阿里巴巴工程师开发的一个性能很好的Java语言实现JSON解析器和生成器,性能极好,据说能超越其他任何的Java JSON解析器。特点是快,功能强大,支持jdk类的任意Javabean类,collection,map,date或enum。无依赖,支持注解和全类型序列化。
JSON简单语法:
{} 双括号表示对象
eg:{“name”: “Xiaoming”} 可以理解为是一个包含name为Xiaoming的对象
[] 中括号表示数组
eg:[{“course”: “Math”},{“course”: “IT”}]就表示包含两个对象的数组
“”双引号内是属性或值
传统的JSON解析
1、生成JSOn字符串

import org.json.JSONException;import org.json.JSONObject;public class JsonUtils {    static JSONObject jsonObject = new JSONObject();//生成json对象    public static JSONObject addJsonObject(String key, Object value){         try {                jsonObject.append(key, value);            } catch (JSONException e) {                e.printStackTrace();            }//通过键值对存放json数据         return jsonObject;    }    public static String createJsonString() {        return jsonObject.toString();//返回json格式字符串    }}---------------------------------------------------------------public class Main {    public static void main(String[] args) {        JsonUtils.addJsonObject("name", "xiaohua");        JsonUtils.addJsonObject("name", "xiaoming");        JsonUtils.addJsonObject("name", "xiaojuan");        JsonUtils.addJsonObject("age", "20");        String jsonString=JsonUtils.createJsonString();        System.out.println("jsonString:"+jsonString);    }   }输出:--------------------------------------------------------------jsonString:{"age":["20"],"name":["xiaohua","xiaoming","xiaojuan"]}

2.解析JSON字符串

分为以下三种数据类型,JavaBean,List数组,嵌套Map的List数组:

public class Person {private int id;private String name;private String address;public int getId() {    return id;}public void setId(int id) {    this.id = id;}public String getName() {    return name;}public void setName(String name) {    this.name = name;}public String getAddress() {    return address;}public void setAddress(String address) {    this.address = address;}}------------------------------------------------------------import java.util.ArrayList;import java.util.List;import org.json.JSONArray;import org.json.JSONObject;/** * 完成对json数据的解析 *  */public class JsonUtils {    public static Person getPerson(String jsonString) {        Person person = new Person();        try {            JSONObject jsonObject = new JSONObject(jsonString);            JSONObject personObject = jsonObject.getJSONObject("person");            person.setId(personObject.getInt("id"));            person.setName(personObject.getString("name"));            person.setAddress(personObject.getString("address"));        } catch (Exception e) {            // TODO: handle exception        }        return person;    }    public static List<Person> getPersons(String key, String jsonString) {        List<Person> list = new ArrayList<Person>();        try {            JSONObject jsonObject = new JSONObject(jsonString);            // 返回json的数组            JSONArray jsonArray = jsonObject.getJSONArray(key);            for (int i = 0; i < jsonArray.length(); i++) {                JSONObject jsonObject2 = jsonArray.getJSONObject(i);                Person person = new Person();                person.setId(jsonObject2.getInt("id"));                person.setName(jsonObject2.getString("name"));                person.setAddress(jsonObject2.getString("address"));                list.add(person);            }        } catch (Exception e) {            // TODO: handle exception        }        return list;    }    public static List<String> getList(String key, String jsonString) {        List<String> list = new ArrayList<String>();        try {            JSONObject jsonObject = new JSONObject(jsonString);            JSONArray jsonArray = jsonObject.getJSONArray(key);            for (int i = 0; i < jsonArray.length(); i++) {                String msg = jsonArray.getString(i);                list.add(msg);            }        } catch (Exception e) {            // TODO: handle exception        }        return list;    }   }----------------------------------------------------------------import java.util.ArrayList;import java.util.List;public class Main {    public static void main(String[] args) {        Person person = new Person();        String jsonString ="{\"person\":{\"id\":\"20\",\"name\":\"xiaohua\",\"address\":\"shenzhen\"}}";        person = JsonUtils.getPerson(jsonString);        System.out.println("id:"+person.getId());        System.out.println("name:"+person.getName());        System.out.println("address:"+person.getAddress());        String jsonString1="{\"person\":[{\"id\":\"20\",\"name\":\"xiaohua\",\"address\":\"shenzhen\"},{\"id\":\"21\",\"name\":\"xiaoming\",\"address\":\"shanghai\"},{\"id\":\"22\",\"name\":\"xiaojuan\",\"address\":\"suzhou\"}]}";        List<Person> list = new ArrayList<Person>();        list=JsonUtils.getPersons("person", jsonString1);        for(int i=0;i<list.size();i++){            person=list.get(i);            System.out.println("id:"+person.getId());            System.out.println("name:"+person.getName());            System.out.println("address:"+person.getAddress());        }    }   }输出:-------------------------------------------------------------id:20name:xiaohuaaddress:shenzhenid:20name:xiaohuaaddress:shenzhenid:21name:xiaomingaddress:shanghaiid:22name:xiaojuanaddress:suzhou

使用GSON解析
Gson的基本用法:定义实体类,根据需要可以将json生成单个实体或列表实体集合。
1.生成json字符串

import com.google.gson.Gson;public class JsonUtils {    public static String createJsonObject(Object obj) {        Gson gson = new Gson();        String str = gson.toJson(obj);        return str;    }}----------------------------------------------------------------public class Main {    public static void main(String[] args) {        Person person = new Person();        person.setAddress("shenzhen");        person.setId(20);        person.setName("xiaohua");        String jsonresult=JsonUtils.createJsonObject(person);        System.out.println(jsonresult);    }   }输出结果:---------------------------------------------------------------{"id":20,"name":"xiaohua","address":"shenzhen"}

2.解析JSON

public class Person {    Person(){    }private int id;private String name;private String address;public int getId() {    return id;}public void setId(int id) {    this.id = id;}public String getName() {    return name;}public void setName(String name) {    this.name = name;}public String getAddress() {    return address;}public void setAddress(String address) {    this.address = address;}}-------------------------------------------------------------------import java.util.ArrayList;import java.util.List;import org.json.JSONArray;import org.json.JSONObject;import com.google.gson.Gson;public class JsonUtils {    public static  <T> T getPerson(String jsonString, Class cls) {        T t = null;        try {            Gson gson = new Gson();            t = (T) gson.fromJson(jsonString, cls);        } catch (Exception e) {            // TODO: handle exception        }        return t;    }    /**     * 使用Gson进行解析 List     */    public static  <T>List<T> getPersons(String key, String jsonString, Class cls) {        List<T> list = new ArrayList<T>();        T t = null;        try {            Gson gson = new Gson();              JSONObject jsonObject = new JSONObject(jsonString);                // 返回json的数组                JSONArray jsonArray = jsonObject.getJSONArray(key);                for (int i = 0; i < jsonArray.length(); i++) {                    JSONObject jsonObject2 = jsonArray.getJSONObject(i);                    t = (T) gson.fromJson(jsonObject2.toString(), cls);                    list.add(t);                }        } catch (Exception e) {        }        return list;    }}--------------------------------------------------------------import java.util.ArrayList;import java.util.List;import com.alibaba.fastjson.JSON;import com.google.gson.Gson;public class Main {    public static void main(String[] args) {        Gson gson =new Gson();        Person person = new Person();        String jsonString ="{\"id\":\"20\",\"name\":\"xiaohua\",\"address\":\"shenzhen\"}";        person=gson.fromJson(jsonString, Person.class);        System.out.println("id:"+person.getId());        System.out.println("name:"+person.getName());        System.out.println("address:"+person.getAddress());        String jsonString1="{\"person\":[{\"id\":\"20\",\"name\":\"xiaohua\",\"address\":\"shenzhen\"},{\"id\":\"21\",\"name\":\"xiaoming\",\"address\":\"shanghai\"},{\"id\":\"22\",\"name\":\"xiaojuan\",\"address\":\"suzhou\"}]}";        List<Person> list = new ArrayList<Person>();        list=JsonUtils.getPersons("person", jsonString1, Person.class);        for(int i=0;i<list.size();i++){            person=list.get(i);            System.out.println("id:"+person.getId());            System.out.println("name:"+person.getName());            System.out.println("address:"+person.getAddress());        }    }   }输出结果:---------------------------------------------------------------id:20name:xiaohuaaddress:shenzhenid:20name:xiaohuaaddress:shenzhenid:21name:xiaomingaddress:shanghaiid:22name:xiaojuanaddress:suzhou

使用FastJSon解析

public class Person {    Person(){    }private int id;private String name;private String address;public int getId() {    return id;}public void setId(int id) {    this.id = id;}public String getName() {    return name;}public void setName(String name) {    this.name = name;}public String getAddress() {    return address;}public void setAddress(String address) {    this.address = address;}}-----------------------------------------------------------import java.util.ArrayList;import java.util.List;import com.alibaba.fastjson.JSON;public class JsonUtils {    public static  <T>T getPerson(String jsonstring, Class cls) {        T t = null;        try {            t = (T) JSON.parseObject(jsonstring, cls);        } catch (Exception e) {            // TODO: handle exception        }        return t;    }    public static  List getPersons(String jsonstring, Class cls) {        List list = new ArrayList();        try {            list = JSON.parseArray(jsonstring, cls);        } catch (Exception e) {            // TODO: handle exception        }        return list;    }}-----------------------------------------------------------------import java.util.ArrayList;import java.util.List;import com.alibaba.fastjson.JSON;import com.google.gson.Gson;public class Main {    public static void main(String[] args) {        Gson gson =new Gson();        Person person = new Person();        String jsonString ="{\"id\":\"20\",\"name\":\"xiaohua\",\"address\":\"shenzhen\"}";        person=gson.fromJson(jsonString, Person.class);        System.out.println("id:"+person.getId());        System.out.println("name:"+person.getName());        System.out.println("address:"+person.getAddress());        String jsonString1="[{\"id\":\"20\",\"name\":\"xiaohua\",\"address\":\"shenzhen\"},{\"id\":\"21\",\"name\":\"xiaoming\",\"address\":\"shanghai\"},{\"id\":\"22\",\"name\":\"xiaojuan\",\"address\":\"suzhou\"}]";        List<Person> list = new ArrayList<Person>();        list=JsonUtils.getPersons( jsonString1, Person.class);        for(int i=0;i<list.size();i++){            person=list.get(i);            System.out.println("id:"+person.getId());            System.out.println("name:"+person.getName());            System.out.println("address:"+person.getAddress());        }    }   }

JSON格式数据相对于XML格式的数据传输会更节省流量,传输效率更高。在这三种解析方式中FastJson是效率最高的,推荐使用。

0 0
原创粉丝点击