2020蓝旭工作室暑假讨论班之JSON解析

    技术2026-02-12  16

    JSON简介

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,易于人的编写和阅读,也易于机器解析。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

    JAVA开发中使用GSON

    因为json有2种类型:

    一种是对象,object -> {key:value,key:value,…} 。另一种是数组,array -> [value,value,…] 。

    所以针对这两种类型,来展开对json数据的操作。GSON在解析json的时候,大体上有2种类型,一种是直接在内存中生成object或array,通过手工指定key来获取值;另一种是借助javabean来进行映射获取值。我们主要采用第二种使用javabean来进行映射获取。

    1.对json进行反序列化得到java对象

    通用示例

    Gson gson = new Gson(); BeanType bean = gson.fronJson(jsonData, BeanType.class);

    具体例子 Java实体类

    package entity; public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }

    利用User类来解析json

    package jsontest; import com.google.gson.Gson; import entity.User; public class JsonToObjectDemo { public static void main(String[] args){ Gson gson = new Gson(); String jsonString = "{\"username\":\"tom\",\"password\":\"123456\"}"; System.out.println(jsonString); User tom = gson.fromJson(jsonString,User.class); System.out.println(tom.toString()); } }

    1.1如果字段名并不一致怎么办? 如果前端传过来的json 数据的key和我们java类的字段不一致,就需要我们在java类中手工进行指定。 比如将username改成userName,这个时候我们可以使用@SerializedName("userName")注解来实现。

    public class User { @SerializedName("userName") private String username; private String password; }

    1.2如果不想某些字段不参加序列化后者反序列化 如果想要让java类的某些字段不参加序列化或反序列化,可以使用@Expose()注解来实现

    @Expose @SerializedName("userName") private String username; @Expose(serialize = false,deserialize = false) private String password;

    利用Java数组来解析json数组

    对于数组形式的json数据,我们还可以反序列化为List类型的数组。因为List进行增删改都比较方便。

    package jsontest; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import entity.User; import java.lang.reflect.Type; import java.util.List; public class JsonArrayToList { public static void main(String[] args){ String jsonString = "[\n" + " {\n" + " \"username\": \"tom\",\n" + " \"password\": \"123456\"\n" + " },\n" + " {\n" + " \"username\": \"tony\",\n" + " \"password\": \"1234567\"\n" + " }\n" + "]"; Gson gson = new Gson(); Type type = new TypeToken<List<User>>(){}.getType(); List<User> userList = gson.fromJson(jsonString,type); } }

    2.由java对象序列化为JSON 我们可以直接把java对象给序列化为json数据。对于未设置的属性,会采取默认值;但是如果默认是null的话,该属性就不会被序列化。

    package jsontest; import com.google.gson.Gson; import entity.User; import java.util.ArrayList; import java.util.List; public class ListToJsonDemo { public static void main(String[] args){ User tom = new User(); User tony = new User(); tom.setUsername("tom"); tom.setPassword("123456"); tony.setUsername("tony"); tony.setPassword("1234567"); List<User> userList = new ArrayList<>(); userList.add(tom); userList.add(tony); Gson gson = new Gson(); String jsonString = gson.toJson(userList); System.out.println(jsonString); } }
    Processed: 0.008, SQL: 9