JSON解析除了导入json包,通过JSONObject类和JSONArray类进行解析外,还有其他的解析方法,如谷歌Gson解析和阿里巴巴FastJson解析,它们都需要导入相应的包。
下面主要介绍Gson解析和FastJson解析:
1.Gson解析:
Gson解析JSON字符串的步骤:
1.创建Gson对象
Gson gson = new Gson();
2.调用Gson的解析方法,fromJson()
其中比较常用的是:
1)fromJson(String json,Class<T> classOfT);
2)fromJson(String json,Type typeOfT);
第一种方法第二个参数是一个.Class对象,该方法返回的是一个类的对象,它解析的原JSON字符串是一个对象形式
第二种方法第二个参数是一个Type对象,该方法返回的是一个List<T>集合,它解析的原JSON字符串是一个数组形式
TypeToken<T> token = new TypeToken<T>(){};
Type type = token.getType();
示例1:
运行结果:
示例2:
1 package com.gson; 2 3 import java.util.List; 4 5 import org.json.JSONArray; 6 import org.json.JSONException; 7 import org.json.JSONObject; 8 9 import com.google.gson.Gson;10 import com.google.gson.reflect.TypeToken;11 12 public class Test2 {13 public static void main(String[] args) throws JSONException {14 String json = "{persons:[{name:'jack',age:23},{name:'tom',age:20}]}";15 16 JSONObject object = new JSONObject(json);17 JSONArray array = object.getJSONArray("persons");18 19 Gson gson = new Gson();20 TypeToken
> token = new TypeToken
>() {21 };22 List list = gson.fromJson(array.toString(), token.getType());23 System.out.println(list);24 }25 26 class Person {27 String name;28 String age;29 30 @Override31 public String toString() {32 return "Person [name=" + name + ", age=" + age + "]";33 }34 }35 }
运行结果:
2.FastJson解析
FastJson可以解析四种类型的JSON字符串:
1. JavaBean
Person person = JSON.parseObject(jsonString, Person.class);
2. List<JavaBean>
List<Person> listPerson =JSON.parseArray(jsonString, Person.class);
3. List<String>
List<String> listString = JSON.parseArray(jsonString, String.class);
4. List<Map<String,Object>>
List<Map<String, Object>> listMap = JSON.parseObject(jsonString, new TypeReference<List<Map<String,Object>>>(){});
示例1:
1 package com.leijia.fastjsondemo; 2 3 import com.alibaba.fastjson.JSON; 4 5 public class Main { 6 public static void main(String[] args) { 7 String jsonStr = "{name:'Tom',age:'23'}"; 8 Student student = JSON.parseObject(jsonStr,Student.class); 9 System.out.println("student:"+student);10 }11 private static class Student{12 String name;13 String age;14 15 public String getName() {16 return name;17 }18 19 public void setName(String name) {20 this.name = name;21 }22 23 public String getAge() {24 return age;25 }26 27 public void setAge(String age) {28 this.age = age;29 }30 31 @Override32 public String toString() {33 return "Student [name=" + name + ", age=" + age + "]";34 }35 }36 }
FastJson不仅可以解析Json字符串,同时也可以将对象转换为JSON字符串。
未完,待续。