首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

Android中使用Google的GSON框架解析JSON数据-方便快捷(含代码)

2013-09-17 
Android中使用Google的GSON框架解析JSON数据----方便快捷(含代码)什么是JSON:JSON即JavaScript Object Nat

Android中使用Google的GSON框架解析JSON数据----方便快捷(含代码)

什么是JSON:

JSON即JavaScript Object Natation, 它是一种轻量级的数据交换格式, 与XML一样, 是广泛被采用的客户端和服务端交互的解决方案.

JSON对象: 

JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, key-value对之间使用逗号分隔. 如:{"name":"coolxing", "age"=24, "male":true, "address":{"street":"huiLongGuan", "city":"beijing", "country":"china"}}. JSON对象的key只能是string类型的, 而value可以是string, number, false, true, null, Object对象甚至是array数组, 也就是说可以存在嵌套的情况.

JSON数组: 

JSON数组(array)以"["开始, 以"]"结束, 数组中的每一个元素可以是string, number, false, true, null, Object对象甚至是array数组, 数组间的元素使用逗号分隔. 如["coolxing", 24, {"street":"huiLongGuan", "city":"beijing", "country":"china"}].

JSON数据的解析:

解析JSON数据, 首先需要明确待解析的是JSON Object还是JSON array, 然后需要确定采用哪种解析技术. android平台上一般有2种解析技术可供选择:android内置的org.json包和google的开源gson库. 以下将分别采用这两种技术解析JSON对象和JSON数组.


1.  采用android内置的org.json包解析JSON对象. 假设待解析的JSON数据为json = "{\"name\":\"coolxing\", \"age\"=24, \"male\":true, \"address\":{\"street\":\"huiLongGuan\", \"city\":\"beijing\", \"country\":\"china\"}}", 其中\用于转义表达式中的双引号. 首先定义2个JavaBean:

new TypeToken<List<Person>>(){}.getType(); 这句代码表示创建一个TypeToken的匿名子类对象, 并调用对象的getType()方法.
org.json包和gson库还有很多其他有用的API, 需要的时候可查看文档. 比如有的时候需要通过java对象或java集合和数组生成json数据上传给服务器, 当然你可以自我构造json字符串, 但会很麻烦. 这个时候就可以使用其中的有关API, 方便的完成这项工作.



测试用例:

package text.com;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;import java.lang.reflect.Type;import java.util.List;import text.com.bean.Address;import text.com.bean.Person;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;public class JsonTest {String jsonString = "";public static void main(String[] args) {// Person p1 = new Person("zhangsan", 12, true, new Address("北京", "海淀区",// "30号"));// Person p2 = new Person("zhangsan", 12, true, new Address("北京", "海淀区",// "30号"));// Person p3 = new Person("zhangsan", 12, true, new Address("北京", "海淀区",// "30号"));// List<Person> list = new ArrayList<Person>();// list.add(p1);// list.add(p2);// list.add(p3);// Gson gson = new Gson();// Type typeOfT = new TypeToken<List<Person>>(){}.getType();// String json = gson.toJson(list, typeOfT);// System.out.println("json:"+json);// String str = readTxtFile("D:\\cjjworkspace\\Test\\json.txt");// System.out.println("文件内容:" + str); Gson gson = new Gson();// Type typeOfT = new TypeToken<List<Person>>(){}.getType();// List<Person> personList = gson.fromJson(str, typeOfT);Person p1 = new Person("zhangsan", 12, true, new Address("北京", "海淀区", "30号"));Type typeOfT = new TypeToken<Person>(){}.getType();String str = gson.toJson(p1, typeOfT);System.out.println(str);}public static String readTxtFile(String filePath) {String encoding = "utf-8";StringBuilder sb = new StringBuilder();try {File file = new File(filePath);if (file.isFile() && file.exists()) { // 判断文件是否存在InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);// 考虑到编码格式BufferedReader bufferedReader = new BufferedReader(read);String str = "";while ((str = bufferedReader.readLine()) != null) {sb.append(str);}read.close();return sb.toString();} else {System.out.println("找不到指定的文件");return null;}} catch (Exception e) {System.out.println("读取文件内容出错");e.printStackTrace();}return sb.toString();}}



附带:gson-2.2.4.jar

           gson-2.2.4-javadoc.jar

           gson-2.2.4-sources.jar




热点排行