一、JSON的概念及作用
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。相比XML,JSON更加简单明了,且占用的资源更少。在实际开发中,JSON被广泛应用于Web服务之间的数据传输。
在Java中,我们可以通过JSON来传递对象等数据结构。Java中有很多JSON解析库,今天我们将使用Google的GSON来进行JSON解析操作。GSON是一个可以将Java对象转换为JSON字符串或将JSON字符串转换为Java对象的Java库。它可用于传输和存储诸如配置文件之类的数据。以下是一个简单的JSON字符串示例:
{ "name": "Tom", "age": 25, "address": { "city": "Beijing", "street": "Chaoyang Road", "postcode": "100101" }, "languages": [ "Java", "C++", "Python" ] }
二、在Java中使用GSON解析JSON
GSON库提供了一个简单的API来序列化和反序列化Java对象和JSON。以下是一个使用GSON将Java对象转换为JSON字符串的示例:
import com.google.gson.Gson; public class MyClass { public static void main(String[] args) { Gson gson = new Gson(); Person person = new Person("Tom", 25); String jsonStr = gson.toJson(person); System.out.println(jsonStr); } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } }
运行上述程序,将输出以下JSON字符串:
{ "name": "Tom", "age": 25 }
可以看到,GSON自动将Person对象转换为了对应的JSON格式。
接下来看一个将JSON字符串转换为Java对象的示例:
import com.google.gson.Gson; public class MyClass { public static void main(String[] args) { Gson gson = new Gson(); String jsonStr = "{\"name\":\"Tom\",\"age\":25}"; Person person = gson.fromJson(jsonStr, Person.class); System.out.println(person.getName()); System.out.println(person.getAge()); } } class Person { private String name; private int age; public String getName() { return name; } public int getAge() { return age; } }
运行上述程序,将输出以下内容:
Tom 25
可以看到,GSON将JSON字符串自动转换为了对应的Java对象。
三、JSON字符串中的复合结构解析
JSON字符串中除了基本类型外,还可以使用数组、对象等复合结构。以下是一个包含复合结构的JSON字符串示例:
{ "name": "Tom", "age": 25, "address": { "city": "Beijing", "street": "Chaoyang Road", "postcode": "100101" }, "languages": [ "Java", "C++", "Python" ] }
在Java中使用GSON解析上述JSON字符串,并将数据赋值给对应的Java类,示例代码如下:
import java.util.List; import com.google.gson.Gson; public class MyClass { public static void main(String[] args) { Gson gson = new Gson(); String json = "{\"name\":\"Tom\",\"age\":25,\"address\":{\"city\":\"Beijing\",\"street\":\"Chaoyang Road\",\"postcode\":\"100101\"},\"languages\":[\"Java\",\"C++\",\"Python\"]}"; Person person = gson.fromJson(json, Person.class); System.out.println(person.getName()); System.out.println(person.getAge()); Address address = person.getAddress(); System.out.println(address.getCity()); System.out.println(address.getStreet()); System.out.println(address.getPostcode()); Listlanguages = person.getLanguages(); for (String language : languages) { System.out.println(language); } } } class Person { private String name; private int age; private Address address; private List languages; public String getName() { return name; } public int getAge() { return age; } public Address getAddress() { return address; } public List getLanguages() { return languages; } } class Address { private String city; private String street; private String postcode; public String getCity() { return city; } public String getStreet() { return street; } public String getPostcode() { return postcode; } }
运行上述程序,将输出以下内容:
Tom 25 Beijing Chaoyang Road 100101 Java C++ Python
可以看到,GSON自动解析了JSON字符串中的复合结构,并将数据赋值给对应的Java类。
四、解析JSON数组
在JSON中,还可以使用数组来表示一组数据。以下是一个JSON数组的示例:
[ { "name": "Tom", "age": 25 }, { "name": "Jack", "age": 30 } ]
在Java中使用GSON解析JSON数组,可以将JSON数组看作是一个数组的集合,每个数组元素可以对应一个Java对象。例如,在上述JSON数组中,每个元素都包含了一个字符串类型的“name”属性和一个整型的“age”属性,因此可以为每个元素定义一个对应的Java类。
import com.google.gson.Gson; import java.util.List; public class MyClass { public static void main(String[] args) { Gson gson = new Gson(); String json = "[{\"name\":\"Tom\",\"age\":25},{\"name\":\"Jack\",\"age\":30}]"; Listpersons = gson.fromJson(json, new TypeToken
>(){}.getType()); for (Person person : persons) { System.out.println(person.getName()); System.out.println(person.getAge()); } } } class Person { private String name; private int age; public String getName() { return name; } public int getAge() { return age; } }
运行上述程序,将输出以下内容:
Tom 25 Jack 30
可以看到,GSON自动解析了JSON数组中的每个元素,并将数据赋值给对应的Java类。