Android中使用Google的GSON框架解析JSON数据----方便快捷(含代码)
来源:互联网 发布:陆小凤系列电影知乎 编辑:程序博客网 时间:2024/06/03 13:33
什么是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:
package text.com.bean;public class Address {private String street;private String city;private String country;public Address() {super();}public Address(String street, String city, String country) {super();this.street = street;this.city = city;this.country = country;}public String getStreet() {return street;}public void setStreet(String street) {this.street = street;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getCountry() {return country;}public void setCountry(String country) {this.country = country;}@Overridepublic String toString() {return "Address [street=" + street + ", city=" + city + ", country="+ country + "]";}}
package text.com.bean;public class Person {private String name;private int age;private boolean male;private Address address;public Person() {super();}public Person(String name, int age, boolean male, Address address) {super();this.name = name;this.age = age;this.male = male;this.address = address;}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;}public boolean isMale() {return male;}public void setMale(boolean male) {this.male = male;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + ", male=" + male+ ", address=" + address + "]";}}
首先使用方法一解析代码如下:
JSONObject jsonObject = new JSONObject(json);String name = jsonObject.getString("name");int age = jsonObject.getInt("age");boolean male = jsonObject.getBoolean("male");JSONObject addressJSON = jsonObject.getJSONObject("address");String street = addressJSON.getString("street");String city = addressJSON.getString("city");String country = addressJSON.getString("country");Address address = new Address(street, city, country);Person person = new Person(name, age, male, address);System.out.println(person);LogCat的输出为Person [name=coolxing, age=24, male=true, address=Address [street=huiLongGuan, city=beijing, country=china]], 说明已经正确解析了JSON对象.
2. 采用gson库解析JSON对象. 假设带解析的JSON数据是json = "{\"name\":\"coolxing\", \"age\"=24, \"male\":true, \"address\":{\"street\":\"huiLongGuan\", \"city\":\"beijing\", \"country\":\"china\"}}", 首先需要到http://code.google.com/p/google-gson/下载jar包, 并将其添加到项目中. 具体的解析代码如下:
Gson gson = new Gson();Person person = gson.fromJson(json, Person.class);System.out.println(person);LogCat的输出为Person [name=coolxing, age=24, male=true, address=Address [street=huiLongGuan, city=beijing, country=china]], 说明已经正确解析了JSON对象, 是不是很简单?
3. 采用android内置的org.json包解析JSON数组. 假设待解析的JSON数据为json = "[{\"name\":\"coolxing\", \"age\"=24, \"male\":true, \"address\":{\"street\":\"huiLongGuan\", \"city\":\"beijing\", \"country\":\"china\"}}, {\"name\":\"min\", \"age\"=20, \"male\":false, \"address\":{\"street\":\"heiShiJiao\", \"city\":\"daLian\", \"country\":\"china\"}}]", 解析代码如下:
List<Person> persons = new ArrayList<Person>();JSONArray jsonArray = new JSONArray(json);for(int i = 0; i < jsonArray.length(); i++) {JSONObject jsonObject = jsonArray.getJSONObject(i);String name = jsonObject.getString("name");int age = jsonObject.getInt("age");boolean male = jsonObject.getBoolean("male");JSONObject addressJSON = jsonObject.getJSONObject("address");String street = addressJSON.getString("street");String city = addressJSON.getString("city");String country = addressJSON.getString("country");Address address = new Address(street, city, country);Person person = new Person(name, age, male, address);persons.add(person);}System.out.println(persons);LogCat的输出为[Person [name=coolxing, age=24, male=true, address=Address [street=huiLongGuan, city=beijing, country=china]], Person [name=min, age=20, male=false, address=Address [street=heiShiJiao, city=daLian, country=china]]], 说明已经正确解析了JSON数组.
4. 采用gson库解析JSON数组. 待解析的JSON数据同上, 具体代码为:
Gson gson = new Gson();Type listType = new TypeToken<List<Person>>(){}.getType();List<Person> persons = gson.fromJson(json, listType);
测试用例:
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-javadoc.jar
gson-2.2.4-sources.jar
- Android中使用Google的GSON框架解析JSON数据----方便快捷(含代码)
- Android中使用Gson解析JSON数据
- Android中使用Gson解析JSON数据
- Android中使用Gson解析JSON数据
- Android中使用Gson解析JSON数据
- Android中使用Gson解析JSON数据
- Android中使用Gson解析JSON数据
- Android中使用Gson解析JSON数据
- Android中使用Gson解析JSON数据
- Android中使用Gson解析JSON数据
- Android中使用Gson解析JSON数据的方法
- Android Studio配置与使用GSON框架解析json数据
- Android 编程下使用 Google 的 Gson 解析 Json
- Android 编程下使用 Google 的 Gson 解析 Json
- android中使用Gson解析普通json数据(致我的第一篇博文)
- JSON格式数据解析及GSON框架的使用详解
- Java创建和解析Json数据方法(五)——Google Gson包的使用
- Java创建和解析Json数据方法(四)——Google Gson包的使用
- 枚举类型
- [C#] Winform里调用系统里默认的邮件客户端
- 【D3.js数据可视化系列教程】--(十三)坐标轴
- c++ 中的sleep 函数
- Usage of hash in Perl
- Android中使用Google的GSON框架解析JSON数据----方便快捷(含代码)
- redmine介绍
- 更新Silverlight 后 无法启动调试 未安装Silverlight developer 运行时解决办法
- 安卓自动化测试工具MonkeyRunner之使用ID进行参数化,以及List选择某项和弹出框点击确定的写法
- Android 中设置ListView选中项的背景颜色
- paip.最新的c++ qt5.1.1环境搭建跟hello world
- delphi Stack
- Z-Stack 绑定中的原码补码反码小插曲
- asp.net Page_Load事件加载两次