Android JSON Gson 解析

來源:互聯網
上載者:User
什麼是JSON:

JavaScript Object Notation是一種輕量級的資料交換格式


與xml差異:

+  JSON相對於XML來講,資料的體積小

+  JSON與JavaScript的互動更加方便

+  JSON的速度要遠遠快於XML

+  JSON對資料的描述性比XML較差


JSON構成: 

(1)   對象:無序的“‘名稱/值’對”集合。一個對象以“{”開始,以“}”結束。每個“名稱”後跟一個“:”,“‘名稱/值’對”之間使用“,”分隔。
(2)   數組:值(value)的有序集合。一個數組以“[”開始,“]”結束。值之間使用“,”分隔。其中,值(value)可以是雙引號括起來的字串(String)、數值(number)、true、false、null、對象(object)或者數組(array)。這些結構可以嵌套。


Gson方法:數組<--->Json

int[] numbers = {1, 1, 2, 3, 5, 8, 13};String[] days = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};Gson gson = new Gson();String numbersJson = gson.toJson(numbers);String daysJson = gson.toJson(days);System.out.println("numbersJson = " + numbersJson);//numbersJson = [1,1,2,3,5,8,13]System.out.println("daysJson = " + daysJson);//daysJson = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]int[] fibonacci = gson.fromJson(numbersJson, int[].class);String[] weekDays = gson.fromJson(daysJson, String[].class);

集合<--->Json

List<String> names = new ArrayList<String>();names.add("Alice");names.add("Bob");names.add("Carol");names.add("Mallory");Gson gson = new Gson();String jsonNames = gson.toJson(names);//jsonNames = ["Alice","Bob","Carol","Mallory"]Student a = new Student("Alice", "Apple St", new Date(2000, 10, 1));Student b = new Student("Bob", "Banana St", null);Student c = new Student("Carol", "Grape St", new Date(2000, 5, 21));Student d = new Student("Mallory", "Mango St", null);List<Student> students = new ArrayList<Student>();students.add(a);students.add(b);students.add(c);students.add(d);gson = new Gson();String jsonStudents = gson.toJson(students);//[{"name":"Alice","address":"Apple St","dateOfBirth":"Nov 1, 3900 12:00:00 AM"},{"name":"Bob","address":"Banana St"},{"name":"Carol","address":"Grape St","dateOfBirth":"Jun 21, 3900 12:00:00 AM"},{"name":"Mallory","address":"Mango St"}]Type type = new TypeToken<List<Student>>(){}.getType();List<Student> studentList = gson.fromJson(jsonStudents, type);Map<--->JsonMap<String, String> colours = new HashMap<String, String>();colours.put("BLACK", "#000000");colours.put("RED", "#FF0000");colours.put("GREEN", "#008000");colours.put("BLUE", "#0000FF");colours.put("YELLOW", "#FFFF00");colours.put("WHITE", "#FFFFFF");Gson gson = new Gson();String json = gson.toJson(colours);//{"WHITE":"#FFFFFF","BLUE":"#0000FF","YELLOW":"#FFFF00","GREEN":"#008000","BLACK":"#000000","RED":"#FF0000"}Type type = new TypeToken<Map<String, String>>(){}.getType();Map<String, String> map = gson.fromJson(json, type);for (String key : map.keySet()) {    System.out.println("map.get = " + map.get(key));}

對象<--->Json

Student student = new Student("Duke", "Menlo Park", dob.getTime());Gson gson = new Gson();String json = gson.toJson(student);//{"name":"Duke","address":"Menlo Park","dateOfBirth":"Feb 1, 2000 12:00:00 AM"}Gson gson = new Gson();Student student = gson.fromJson(json, Student.class);


嵌套解析
package test0328;import java.util.Arrays;public class Person {/* * {   "phone" : ["112233", "445566"], // 數組   "name" : "android", // 字串   "age" : 5, // 數值   "address" : { "country" : "china", "province" : "ShangHai" }, // 對象   "married" : false // 布爾值   }, *  */private String[] phone;/** * @return the address */public Address getAddress() {return address;}/** * @param address *            the address to set */public void setAddress(Address address) {this.address = address;}private String name;private int age;private Address address = null;private boolean married;/** * @return the phone */public String[] getPhone() {return phone;}/** * @param phone *            the phone to set */public void setPhone(String[] phone) {this.phone = phone;}/* * (non-Javadoc) *  * @see java.lang.Object#toString() */@Overridepublic String toString() {return "Person [phone=" + Arrays.toString(phone) + ", name=" + name+ ", age=" + age + ", address=" + address + ", married="+ married + "]";}/** * @return the name */public String getName() {return name;}/** * @param name *            the name to set */public void setName(String name) {this.name = name;}/** * @return the age */public int getAge() {return age;}/** * @param age *            the age to set */public void setAge(int age) {this.age = age;}/** * @return the married */public boolean isMarried() {return married;}/** * @param married *            the married to set */public void setMarried(boolean married) {this.married = married;}}


package test0328;public class Address {// "address" : { "country" : "china", "province" : "ShangHai" }, // 對象  private String country;private String province;/** * @return the country */public String getCountry() {return country;}/** * @param country *            the country to set */public void setCountry(String country) {this.country = country;}/** * @return the province */public String getProvince() {return province;}/** * @param province *            the province to set */public void setProvince(String province) {this.province = province;}/* * (non-Javadoc) *  * @see java.lang.Object#toString() */@Overridepublic String toString() {return "Address [country=" + country + ", province=" + province + "]";}}


package test0328;import java.io.StringReader;import com.google.gson.Gson;import com.google.gson.stream.JsonReader;public class Json {/*[{   "phone" : ["112233", "445566"], // 數組   "name" : "android", // 字串   "age" : 5, // 數值   "address" : { "country" : "PRC", "province" : "ShangHai" }, // 對象   "married" : false // 布爾值   }, { "phone" : ["778899", "224466"], // 數組   "name" : "Linux", // 字串   "age" : 15, // 數值   "address" : { "country" : "USA", "province" : "NY" }, // 對象   "married" : true // 布爾值   }]  */private static final String Json = "[{\"phone\" : [\"112233\", \"445566\"], \"name\" : \"android\",  \"age\" : 5,  \"address\" : { \"country\" : \"china\", \"province\" : \"ShangHai\" },  \"married\" : false},{\"phone\" : [\"778899\", \"224466\"], \"name\" : \"linux\",\"age\" : 15, \"address\" : { \"country\" : \"USA\", \"province\" : \"NY\" },\"married\" : true }]";private static Gson gson = new Gson();public static void main(String[] args) throws Exception  {JsonReader reader = new JsonReader(new StringReader(Json));reader.beginArray();//開始數組while(reader.hasNext()){//迴圈reader.beginObject();//開始對象Person person = new Person();while(reader.hasNext()){//迴圈String tagName = reader.nextName();if("phone".equals(tagName)){reader.beginArray(); String[] phones = new String[2]; phones[0] = reader.nextString(); phones[1] = reader.nextString(); person.setPhone(phones);reader.endArray();}else if("name".equals(tagName)){person.setName(reader.nextString());}else if("age".equals(tagName)){person.setAge(reader.nextInt());}else if("address".equals(tagName)){reader.beginObject();Address address = new Address();while(reader.hasNext()){int i = 0;String tagName2 = reader.nextName();if("country".equals(tagName2)){address.setCountry(reader.nextString());}else{address.setProvince(reader.nextString());}}person.setAddress(address);reader.endObject();}else if("married".equals(tagName)){person.setMarried(reader.nextBoolean());}}reader.endObject();System.out.println(person);}reader.endArray();}public static int[] intsfromJson(String json){return gson.fromJson(json, int[].class);}public static String[] stringsfromJson(String json){return gson.fromJson(json, String[].class);}}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.