android:json解析的兩個工具:Gson和Jackson的使用小例子

1.簡介java

json是android與服務器通訊過程當中經常使用的數據格式,例如,以下是一個json格式的字符串:android

{"address":"Nanjing","name":"NUPT","students":[{"name":"stu1","id":"10000","age":20},{"name":"stu1","id":"10001","age":21},{"name":"stu1","id":"10002","age":22}]}

2.android中經常使用的兩個json庫爲:Gson和Jackson,一下就看一下它們是如何將對象轉化爲json字符串,以及如何將json字符串轉化爲java對象。web

定義Student類:json

/*
 * $filename: Student.java,v $
 * $Date: 2014-5-12  $
 * Copyright (C) ZhengHaibo, Inc. All rights reserved.
 * This software is Made by Zhenghaibo.
 */
package com.example.testjson; /* *@author: ZhengHaibo *web: http://blog.csdn.net/nuptboyzhb *mail: zhb931706659@126.com *2014-5-12 Nanjing,njupt,China */ public class Student {  private String name;  private String id;  private int age;  public String getName() {   return name;  }  public void setName(String name) {   this.name = name;  }  public String getId() {   return id;  }  public void setId(String id) {   this.id = id;  }  public int getAge() {   return age;  }  public void setAge(int age) {   this.age = age;  } }

定義School類: 服務器

/*
 * $filename: School.java,v $
 * $Date: 2014-5-12  $
 * Copyright (C) ZhengHaibo, Inc. All rights reserved.
 * This software is Made by Zhenghaibo.
 */
package com.example.testjson; import java.util.List; /* *@author: ZhengHaibo *web: http://blog.csdn.net/nuptboyzhb *mail: zhb931706659@126.com *2014-5-12 Nanjing,njupt,China */ public class School {  private String name;  private String address;  List<Student> students;  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;  }  public List<Student> getStudents() {   return students;  }  public void setStudents(List<Student> students) {   this.students = students;  } }

初始化一個School的java對象,待使用: app

private School initSchoolData(){
    School school = new School();    school.setAddress("Nanjing");    school.setName("NUPT");    List<Student> list = new ArrayList<Student>();    for(int i= 0;i<3;i++){     Student student = new Student();     student.setAge(20+i);     student.setId("1000"+i);     student.setName("stu"+1);     list.add(student);    }    school.setStudents(list);    return school;   }

3.使用Gson,進行java對象與json字符串之間的相互轉換工具

private void testGson(){    School school = initSchoolData();    Gson gson = new Gson();    //將對象轉化爲json字符串    String jsonString = gson.toJson(school).toString();    //打印    System.out.println("GSON="+jsonString);    /******分割線*****/    //將字符串轉化爲JSON對象    School resultSchool = gson.fromJson(jsonString, School.class);    //打印    System.out.println(resultSchool.getStudents().get(0).getName());   }

可見,Gson是經過toJson和fromJson兩個方法進行轉換的,使用起來十分方便。 this

4.使用Jacksongoogle

private void testJackson(){    School school = initSchoolData();    ObjectMapper objectMapper = new ObjectMapper();    String jsonString = "";    //將對象轉化爲Json字符串    try {     jsonString = objectMapper.writeValueAsString(school);     System.out.println("Jackson="+jsonString);    } catch (JsonProcessingException e) {     // TODO Auto-generated catch block     e.printStackTrace();    }    //將json字符串解析成java對象    try {     School resultSchool = objectMapper.readValue(jsonString, School.class);     //打印     System.out.println(resultSchool.getStudents().get(0).getName());    } catch (JsonParseException e) {     // TODO Auto-generated catch block     e.printStackTrace();    } catch (JsonMappingException e) {     // TODO Auto-generated catch block     e.printStackTrace();    } catch (IOException e) {     // TODO Auto-generated catch block     e.printStackTrace();    }   }

使用Jackson,主要是使用writeValueAsString和readValue這兩個方法。此外,Jackson的writeValue和readValue有不少種參數類型,適用於多中場合。 spa

注意:以上只是這兩個工具類的基本用法,更多瞭解,參見官方文檔。

Gson文檔:  http://code.google.com/p/google-gson/

Jackson:  http://jackson.codehaus.org/

相關文章
相關標籤/搜索