利用Java怎么实现一个解析Json功能
更新时间:2023-12-28第一段
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。因为在很多场合中需要将数据作为参数传递,在大多数编程语言中都内置了 JSON 的解析器,Java 语言也提供了自己的 JSON 解析库。本段将通过一个简单的例子,展示如何利用 com.google.code.gson 库实现 JSON 数据的解析,并对代码进行解释。
String jsonString = "{\"name\":\"Tom\",\"age\":\"25\",\"address\":[{\"home\":\"street 3\",\"city\":\"NYC\"},{\"home\":\"lane 5\",\"city\":\"LA\"}]}"; JsonObject jsonObject = new JsonParser().parse(jsonString).getAsJsonObject(); String name = jsonObject.get("name").getAsString(); int age = jsonObject.get("age").getAsInt(); JsonArray addresses = jsonObject.getAsJsonArray("address"); ListhomeAddresses = new ArrayList<>(); List cities = new ArrayList<>(); for (JsonElement address : addresses) { JsonObject addressObject = address.getAsJsonObject(); homeAddresses.add(addressObject.get("home").getAsString()); cities.add(addressObject.get("city").getAsString()); }
第二段
在上面的例子中,先定义一个 JSON 字符串,JSON 解析器将其解析成一个 JsonObject 对象。JsonObject 对象是一个 HashMap 集合对象,同时具有 JsonObject 对象的特有操作,可以对其进行其他更细化的操作。在 JsonObject 对象中,可以根据 key 取到对应的 value,例如,获取其中的 name 和 age 字段。在获取 address 字段时,由于其是一个 JSON 数组,所以需要先将其转换为 JsonArray 对象,然后才能对其进行遍历,遍历过程中通过 getAsJsonObject() 方法获取 JsonArray 中的 JsonObject 对象,再取出其中的 home 字段和 city 字段。
{ "name": "Tom", "age": "25", "address": [ { "home": "street 3", "city": "NYC" }, { "home": "lane 5", "city": "LA" } ] }
第三段
在解析 JSON 数据时,常常需要用到模型类。模型类是用来存储数据的类,可以将解析出来的 JSON 数据赋值给模型类的字段,以此方便对数据的操作。下面是一个示例代码,展示如何将 JSON 数据转换成带有模型类的 List 集合。
public class Person { private String name; private int age; private List addressList; // 构造函数,getter 和 setter 略 } public class Address { private String home; private String city; // 构造函数,getter 和 setter 略 } // 将 JSON 字符串解析成带有模型类的 List 集合 Gson gson = new Gson(); Type listType = new TypeToken>(){}.getType(); List
personList = gson.fromJson(jsonString, listType);
第四段
在上面的例子中,定义两个模型类 —— Person 和 Address。Person 类中有一个名为 addressList 的 List 集合,其内部存放的是 Address 对象。在解析 JSON 数据时,使用 Gson 的 fromJson() 方法,直接将 JSON 字符串转换为带有模型类的 List 集合。其中,TypeToken 用来表示带有泛型的类,getType() 方法用来获取实际类型的 Type 对象。通过这种方式,可以方便地将 JSON 数据转换为带有模型类的 Java 对象,进一步进行操作。