Gson在解析java数据格式的三种范例
2018-03-26 12:13
183 查看
Gson是谷歌提供的一个开源库,用来解析json格式的数据非常好用。如果用maven进行项目管理的话,可以在pom.xml中引入如下依赖:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency> 如果不是,请自行下载jar包:gson-2.8.0.jar。
接下来讲述如何用Gson进行单条无嵌套Json数据的解析、单条有嵌套的json数据解析和解析json数组:
import com.google.gson.Gson;
public class GJsonExap {
public static void main(String[] args) {
/*
一、单条无嵌套json数据的解析
*/
//给出如下的json,将如下json数据解析成Person对象
String gStr = "{'name':'Json','age':20}";
String gStr1 = "{\"name\":\"Rose\",\"age\":12}";
Gson gson = new Gson();
Person person = gson.fromJson(gStr,Person.class);
Person person1 = gson.fromJson(gStr1,Person.class);
System.out.println(person.toString());
System.out.println(person1.toString());
}
}
class Person{
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
import com.google.gson.Gson;
public class GsonTest1{
/*
考虑到json数据的不同,那么解析Json时候所用的类也可能不同,比如这里
你可能用Person,而如果解析其他数据时又变成Dog.Cat了,因此考虑
将Gson解析的步骤封装,并提供泛型参数,示例如下
*/
public static void main(String[] args) {
String strJson = "{\"name\":\"wangcai\",\"category\":\"旺旺\"}";
Dog dog = parseJsonWithGson(strJson,Dog.class);
System.out.println(dog.toString());
}
public static <T> T parseJsonWithGson(String jsonData,Class<T>type){
Gson gson = new Gson();
return gson.fromJson(jsonData,type);
}
}
class Dog{
private String name;
private String category;
public Dog() {
}
public Dog(String name, String category) {
this.name = name;
this.category = category;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", category='" + category + '\'' +
'}';
}
}
package cn.itcast.scala.generic.java;
import java.util.List;
public class GsonTest3 {
/*
三、 解析Json数组:比如有如下Json数据:json数组最外层要加“[]”
[{'name':'John','grade':[{'course':'English','score':100},{'course':'Math','score':78}]},
{'name':'Tom','grade':[{'course':'English','score':90},{'course':'Math','score':87}]}]
Student(name,grade[English,Math])
处理这类数据要用到List
*/
public static void main(String[] args) {
String jsonDate = "[{'name':'John', 'grade':[{'course':'English','score':100},{'course':'Math','score':78}]},{'name':'Tom', 'grade':[{'course':'English','score':86},{'course':'Math','score':90}]}]";
List<Stu> students =GsonUtil.parsJsonArrayWithGson(jsonDate,Stu.class);
System.out.println(students);
}
}
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency> 如果不是,请自行下载jar包:gson-2.8.0.jar。
接下来讲述如何用Gson进行单条无嵌套Json数据的解析、单条有嵌套的json数据解析和解析json数组:
import com.google.gson.Gson;
public class GJsonExap {
public static void main(String[] args) {
/*
一、单条无嵌套json数据的解析
*/
//给出如下的json,将如下json数据解析成Person对象
String gStr = "{'name':'Json','age':20}";
String gStr1 = "{\"name\":\"Rose\",\"age\":12}";
Gson gson = new Gson();
Person person = gson.fromJson(gStr,Person.class);
Person person1 = gson.fromJson(gStr1,Person.class);
System.out.println(person.toString());
System.out.println(person1.toString());
}
}
class Person{
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
import com.google.gson.Gson;
public class GsonTest1{
/*
考虑到json数据的不同,那么解析Json时候所用的类也可能不同,比如这里
你可能用Person,而如果解析其他数据时又变成Dog.Cat了,因此考虑
将Gson解析的步骤封装,并提供泛型参数,示例如下
*/
public static void main(String[] args) {
String strJson = "{\"name\":\"wangcai\",\"category\":\"旺旺\"}";
Dog dog = parseJsonWithGson(strJson,Dog.class);
System.out.println(dog.toString());
}
public static <T> T parseJsonWithGson(String jsonData,Class<T>type){
Gson gson = new Gson();
return gson.fromJson(jsonData,type);
}
}
class Dog{
private String name;
private String category;
public Dog() {
}
public Dog(String name, String category) {
this.name = name;
this.category = category;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", category='" + category + '\'' +
'}';
}
}
package cn.itcast.scala.generic.java; public class GsonTest2 { /* 二、单条有嵌套的json数据:{"name":"John","age":"20","grade":{"course":"English","score":"100","level":"A"}} 此类数据要用公共内部类来解决 */ public static void main(String[] args) { String strJson = "{\"name\":\"John\",\"age\":20,\"grade\":{\"course\":\"English\",\"score\":100,\"Level\":\"A\"}}"; String strJson1 = "{'name':'Rose','age':22,'grade':{'course':'English','score':100,'level':'A'}}"; //用先前GsonTest1中封装的Gson解析工具类,提供泛型参数 Student stu1 = GsonTest1.parseJsonWithGson(strJson,Student.class); Student stu2 = GsonTest1.parseJsonWithGson(strJson1,Student.class); System.out.println(stu1.toString()); System.out.println(stu2.toString()); } } // 一、根据Json数据串定义Student对象 class Student{ private String name; private int age; private Grade grade; public class Grade{ private String course; private int score; private String level; public String getCourse() { return course; } public void setCourse(String course) { this.course = course; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public String getLevel() { return level; } public void setLevel(String level) { this.level = level; } @Override public String toString() { return "Grade{" + "course='" + course + '\'' + ", score=" + score + ", level='" + level + '\'' + '}'; } } 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 Grade getGrade() { return grade; } public void setGrade(Grade grade) { this.grade = grade; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", grade=" + grade + '}'; } }-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package cn.itcast.scala.generic.java;
import java.util.List;
public class GsonTest3 {
/*
三、 解析Json数组:比如有如下Json数据:json数组最外层要加“[]”
[{'name':'John','grade':[{'course':'English','score':100},{'course':'Math','score':78}]},
{'name':'Tom','grade':[{'course':'English','score':90},{'course':'Math','score':87}]}]
Student(name,grade[English,Math])
处理这类数据要用到List
*/
public static void main(String[] args) {
String jsonDate = "[{'name':'John', 'grade':[{'course':'English','score':100},{'course':'Math','score':78}]},{'name':'Tom', 'grade':[{'course':'English','score':86},{'course':'Math','score':90}]}]";
List<Stu> students =GsonUtil.parsJsonArrayWithGson(jsonDate,Stu.class);
System.out.println(students);
}
}
//下面是我重新写的一个Json工具类
package cn.itcast.scala.generic.java; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.util.List; public class GsonUtil { //将json对象解析成相应的映射对象 public static <T> T parseJsonWithGson(String str,Class<T> type){ Gson gson = new Gson(); return gson.fromJson(str,type); } //将json对象解析成相应的映射对象列表 public static <T> List<T> parsJsonArrayWithGson(String str,Class<T> type){ Gson gson = new Gson(); /*GSON提供了 TypeToken 这个类来帮助我们捕获(capture)像List<MyZhuiHaoDetailModel>这样的泛型信息。 上文创建了一个匿名内部类,这样,Java编译器就会把泛型信息编译到这个匿名内部类里,然后在运行时就可以被 getType()方法用反射API提取到。 */ return gson.fromJson(str,new TypeToken<List<T>>(){ }.getType()); } }class Stu{ private String name; private List<Grade> grade; public class Grade{ private String course; private int score; public String getCourse() { return course; } public void setCourse(String course) { this.course = course; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } @Override public String toString() { return "Grade{" + "course='" + course + '\'' + ", score=" + score + '}'; } } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Grade> getGrade() { return grade; } public void setGrade(List<Grade> grade) { this.grade = grade; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", grade=" + grade + '}'; }}
相关文章推荐
- Java-json系列(一):用GSON解析Json格式数据
- Java-json系列(一):用GSON解析Json格式数据
- Java-json系列(一):用GSON解析Json格式数据
- 很好用的Google 开源项目Gson在java中解析和创建json格式的数据
- 很好用的Google 开源项目Gson在java中解析和创建json格式的数据
- Java-json系列(一):用GSON解析Json格式数据
- Java HttpURLConnection 抓取网页内容 解析gzip格式输入流数据并转换为String格式字符串
- java解析WCF协议中application/msbin1格式数据
- java解析json格式数据
- 利用百度车联网提供的天气查询接口用python查询天气信息以及安卓(Java)利用gson解析数据
- Android连接服务器数据库查询+Gson解析(List和Map)格式json数据(二)
- Java解析JSON格式数据二
- java中解析json格式数据
- 关于java 发送http json数据格式请求时,服务器端如何接收json数据并解析
- GSON解析复杂json数据格式
- Java解析JSON格式数据三
- Gson解析(List和Map)格式json数据
- Json数据格式解析示例 (语言:Java 包:org.json.jar)
- 通过java代码对json格式数据进行解析
- java解析json格式的数据