幾種常見的Json工具包

概述

做爲 面向對象 開發的程序員,天天的業務代碼會遇到大量的 Json 處理。本文從最多見的幾個類庫 gson, fastjson, jackson 進行基本操做, 僅做記錄。java

基礎準備

首先建立 java 對象用於測試程序員

角色json

/** * @author 當我趕上你 * @公衆號 當我趕上你 * @since 2020-06-10 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Role {

    private String roleName;

}
複製代碼

這裏咱們建立一個複合嵌套對象 userapp

/** * @author 當我趕上你 * @公衆號 當我趕上你 * @since 2020-06-10 */
@Data
public class User {

    private String userName;
    private List<Role> roles;
}
複製代碼

用戶組maven

/** * @author 當我趕上你 * @公衆號 當我趕上你 * @since 2020-06-11 */
@Data
public class UserGroup implements Serializable {

    private String groupName;
    private Map<String, User> idNumber;

}
複製代碼

菜單ide

/** * @author 當我趕上你 * @公衆號 當我趕上你 * @since 2020-06-10 */
@Data
@AllArgsConstructor
public class Menu {

    @SerializedName("menu_name")
    private String menuName;

}
複製代碼

部門單元測試

/** * @author 當我趕上你 * @公衆號 當我趕上你 * @since 2020-06-11 */
@Data
@AllArgsConstructor
public class Dept {
    private String deptName;
}
複製代碼

類型適配器測試

/** * @author 當我趕上你 * @公衆號 當我趕上你 * @since 2020-06-11 */
public class DeptAdapter implements JsonSerializer<Dept> {

    @Override
    public JsonElement serialize(Dept dept, Type type, JsonSerializationContext jsonSerializationContext) {

        JsonObject deptObject = new JsonObject();
        deptObject.addProperty("dept_name", dept.getDeptName());

        return deptObject;
    }
}
複製代碼

Gson

maven 依賴ui

<dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
        </dependency>
複製代碼

單元測試google

/** * @author 當我趕上你 * @公衆號 當我趕上你 * @since 2020-06-10 */
class GsonTest {

    /** * {"userName":"admin","roles":[{"roleName":"系統管理員"},{"roleName":"普通管理員"}]} */
    @Test
    void toJson() {
        Role role1 = new Role("系統管理員");
        Role role2 = new Role("普通管理員");
        User user = new User();
        user.setUserName("admin");
        user.setRoles(Arrays.asList(role1, role2));

        // 對象轉json
        String json = new Gson().toJson(user);
        System.out.println(json);
    }

    /** * {"userName":"admin","roles":[{"roleName":"系統管理員"},{"roleName":"普通管理員"}]} */
    @Test
    void toJson2() {
        Role role1 = new Role("系統管理員");
        Role role2 = new Role("普通管理員");
        User user = new User();
        user.setUserName("admin");
        user.setRoles(Arrays.asList(role1, role2));

        String json = new GsonBuilder().create().toJson(user);
        System.out.println(json);
    }

    /** * User(userName=admin, roles=[Role(roleName=系統管理員), Role(roleName=普通管理員)]) */
    @Test
    void fromJson() {
        String json = "{\"userName\":\"admin\",\"roles\":[{\"roleName\":\"系統管理員\"},{\"roleName\":\"普通管理員\"}]}";
        User user = new Gson().fromJson(json, User.class);
        System.out.println(user);
    }

    /** * admin * {"userName":"admin","roles":{"roleName":"超級管理員"}} */
    @Test
    void createJsonObject() {

        JsonObject role = new JsonObject();
        role.addProperty("roleName", "超級管理員");

        JsonObject user = new JsonObject();
        user.addProperty("userName", "admin");
        user.add("roles", role);

        String username = user.get("userName").getAsString();
        System.out.println(username);
        System.out.println(user);
    }

    /** * admin */
    @Test
    void json2Object() {

        String json = "{\"userName\":\"admin\",\"roles\":[{\"roleName\":\"系統管理員\"},{\"roleName\":\"普通管理員\"}]}";

        JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
        String userName = jsonObject.get("userName").getAsString();
        System.out.println(userName);
    }


    /** * [{"roleName":"系統管理員"},{"roleName":"普通管理員"}] */
    @Test
    void list2Json() {

        Role role1 = new Role("系統管理員");
        Role role2 = new Role("普通管理員");
        String json = new Gson().toJson(Arrays.asList(role1, role2));

        System.out.println(json);
    }

    /** * [Role(roleName=系統管理員), Role(roleName=普通管理員)] */
    @Test
    void json2List() {
        String json = "[{\"roleName\":\"系統管理員\"},{\"roleName\":\"普通管理員\"}]";
        List<Role> roles = new Gson().fromJson(json, new TypeToken<List<Role>>() {}.getType());

        System.out.println(roles);
    }

    /** * [{"roleName":"系統管理員"},{"roleName":"普通管理員"}] */
    @Test
    void json2Array() {
        String json = "[{\"roleName\":\"系統管理員\"},{\"roleName\":\"普通管理員\"}]";
        JsonArray jsonArray = JsonParser.parseString(json).getAsJsonArray();

        System.out.println(jsonArray);
    }

    /** * {"userName":"admin"} */
    @Test
    void map2Json() {
        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("userName", "admin");

        String json = new Gson().toJson(hashMap);
        System.out.println(json);
    }

    /** * admin */
    @Test
    void json2Map() {
        String json = "{\"userName\":\"admin\"}";
        HashMap hashMap = new Gson().fromJson(json, new TypeToken<HashMap<String, String>>() {}.getType());

        System.out.println(hashMap.get("userName"));
    }


    /** * 默認的字段轉換規則,字段名不變 * {"roleName":"超級管理員"} */
    @Test
    void setFieldNamingPolicy1() {

        Gson gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.IDENTITY)
                .create();

        Role role = new Role("超級管理員");
        String json = gson.toJson(role);
        System.out.println(json);
    }

    /** * 將json中的字段名轉換爲首字母大寫的格式 * {"RoleName":"超級管理員"} */
    @Test
    void setFieldNamingPolicy2() {

        Gson gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
                .create();

        Role role = new Role("超級管理員");
        String json = gson.toJson(role);
        System.out.println(json);
    }

    /** * 將json中的字段名轉換爲首字母大寫,單詞之間以空格分割的格式 * {"Role Name":"超級管理員"} */
    @Test
    void setFieldNamingPolicy3() {

        Gson gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE_WITH_SPACES)
                .create();

        Role role = new Role("超級管理員");
        String json = gson.toJson(role);
        System.out.println(json);
    }

    /** * 將json中的字段名轉換爲小寫字母,單詞之間如下劃線分割的格式 * {"role_name":"超級管理員"} */
    @Test
    void setFieldNamingPolicy4() {

        Gson gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
                .create();

        Role role = new Role("超級管理員");
        String json = gson.toJson(role);
        System.out.println(json);
    }

    /** * 將json中的字段名轉換爲小寫字母,單詞之間以分隔線分割的格式 * {"role-name":"超級管理員"} */
    @Test
    void setFieldNamingPolicy5() {

        Gson gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES)
                .create();

        Role role = new Role("超級管理員");
        String json = gson.toJson(role);
        System.out.println(json);
    }

    /** * 將json中的字段名轉換爲小寫字母,單詞之間以點分割的格式 * {"role.name":"超級管理員"} */
    @Test
    void setFieldNamingPolicy6() {

        Gson gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DOTS)
                .create();

        Role role = new Role("超級管理員");
        String json = gson.toJson(role);
        System.out.println(json);
    }

    /** * 屬性重命名 * {"menu_name":"系統管理"} */
    @Test
    void serializedName() {
        Menu menu = new Menu("系統管理");

        String json = new Gson().toJson(menu);
        System.out.println(json);
    }

    /** * {"dept_name":"產品研發部"} */
    @Test
    void adapter() {
        Gson gson = new GsonBuilder()
                //爲Dept註冊TypeAdapter
                .registerTypeAdapter(Dept.class, new DeptAdapter())
                .create();

        Dept dept = new Dept("產品研發部");
        String json = gson.toJson(dept);

        System.out.println(json);
    }

}
複製代碼

FastJson

maven 依賴

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.68</version>
        </dependency>
複製代碼

單元測試

public class FastJsonTest {

    /** * {"roles":[{"roleName":"系統管理員"},{"roleName":"普通管理員"}],"userName":"admin"} */
    @Test
    void toJson() {
        Role role1 = new Role("系統管理員");
        Role role2 = new Role("普通管理員");
        User user = new User();
        user.setUserName("admin");
        user.setRoles(Arrays.asList(role1, role2));

        String userJson = JSON.toJSONString(user);
        System.out.println(userJson);
    }

    /** * admin * {"roles":[{"roleName":"系統管理員"},{"roleName":"普通管理員"}],"userName":"admin"} */
    @Test
    void jsonParse() {
        String json = "{\"roles\":[{\"roleName\":\"系統管理員\"},{\"roleName\":\"普通管理員\"}],\"userName\":\"admin\"}";
        JSONObject jsonObject = JSON.parseObject(json);

        System.out.println(jsonObject.getString("userName"));
        System.out.println(jsonObject);
    }

    /** * [{"roleName":"系統管理員"},{"roleName":"普通管理員"}] */
    @Test
    void list2Json() {
        Role role1 = new Role("系統管理員");
        Role role2 = new Role("普通管理員");

        String jsonString = JSON.toJSONString(Arrays.asList(role1, role2));

        System.out.println(jsonString);
    }

    /** * [{"roleName":"系統管理員"},{"roleName":"普通管理員"}] */
    @Test
    void json2List() {
        String json = "[{\"roleName\":\"系統管理員\"},{\"roleName\":\"普通管理員\"}]";

        JSONArray jsonArray = JSON.parseArray(json);
        System.out.println(jsonArray);
    }

    /** * [Role(roleName=系統管理員), Role(roleName=普通管理員)] */
    @Test
    void json2List2() {
        String json = "[{\"roleName\":\"系統管理員\"},{\"roleName\":\"普通管理員\"}]";

        List<Role> users = JSON.parseArray(json, Role.class);
        System.out.println(users);
    }

    /** * User(userName=admin, roles=[Role(roleName=系統管理員), Role(roleName=普通管理員)]) */
    @Test
    void json2Bean() {
        String json = "{\"roles\":[{\"roleName\":\"系統管理員\"},{\"roleName\":\"普通管理員\"}],\"userName\":\"admin\"}";

        User user = JSON.parseObject(json, User.class);
        System.out.println(user);
    }

    /** * User(userName=admin, roles=[Role(roleName=系統管理員), Role(roleName=普通管理員)]) */
    @Test
    void json2Bean2() {
        String json = "{\"roles\":[{\"roleName\":\"系統管理員\"},{\"roleName\":\"普通管理員\"}],\"userName\":\"admin\"}";

        User user = JSON.parseObject(json, new TypeReference<User>(){});
        System.out.println(user);
    }

    /** * {"userName":"admin"} */
    @Test
    void map2Json() {
        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("userName", "admin");

        String jsonString = JSON.toJSONString(hashMap);
        System.out.println(jsonString);
    }

    /** * admin */
    @Test
    void json2Map() {
        String json = "{\"userName\":\"admin\"}";

        Map<String, String> map = (Map<String, String>) JSON.parse(json);
        System.out.println(map.get("userName"));
    }

    /** * {"userName":"admin"} */
    @Test
    void json2Map2() {
        String json = "{\"userName\":\"admin\"}";

        Map map = JSON.parseObject(json);
        System.out.println(map);
    }

    /** * {"groupName":"分組1","idNumber":{"001":{"roles":[{"roleName":"系統管理員"},{"roleName":"普通管理員"}],"userName":"admin"}}} */
    @Test
    void obj2Json() {
        Role role1 = new Role("系統管理員");
        Role role2 = new Role("普通管理員");
        User user = new User();
        user.setUserName("admin");
        user.setRoles(Arrays.asList(role1, role2));

        HashMap<String, User> map = new HashMap<>();
        map.put("001", user);
        UserGroup userGroup = new UserGroup();
        userGroup.setGroupName("分組1");
        userGroup.setIdNumber(map);

        String jsonString = JSON.toJSONString(userGroup);
        System.out.println(jsonString);
    }

    /** * UserGroup(groupName=分組1, idNumber={001=User(userName=admin, roles=[Role(roleName=系統管理員), Role(roleName=普通管理員)])}) */
    @Test
    void json2Obj() {
        String json = "{\"groupName\":\"分組1\",\"idNumber\":{\"001\":{\"roles\":[{\"roleName\":\"系統管理員\"},{\"roleName\":\"普通管理員\"}],\"userName\":\"admin\"}}}";

        UserGroup userGroup = JSON.parseObject(json, UserGroup.class);
        System.out.println(userGroup);
    }

}
複製代碼

Jackson

單元測試

/** * @author 當我趕上你 * @公衆號 當我趕上你 * @since 2020-06-11 */
public class JacksonTest {

    /** * {"userName":"admin","roles":[{"roleName":"系統管理員"},{"roleName":"普通管理員"}]} * @throws JsonProcessingException */
    @Test
    void Obj2Json() throws JsonProcessingException {
        Role role1 = new Role("系統管理員");
        Role role2 = new Role("普通管理員");
        User user = new User();
        user.setUserName("admin");
        user.setRoles(Arrays.asList(role1, role2));

        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(user);

        System.out.println(json);
    }

    /** * 須要無參構造方法 * User(userName=admin, roles=[Role(roleName=系統管理員), Role(roleName=普通管理員)]) * @throws JsonProcessingException */
    @Test
    void json2Obj() throws JsonProcessingException {
        String json = "{\"userName\":\"admin\",\"roles\":[{\"roleName\":\"系統管理員\"},{\"roleName\":\"普通管理員\"}]}";

        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(json, User.class);
        System.out.println(user);
    }

    /** * admin * @throws JsonProcessingException */
    @Test
    void json2Obj2() throws JsonProcessingException {
        String json = "{\"userName\":\"admin\",\"roles\":[{\"roleName\":\"系統管理員\"},{\"roleName\":\"普通管理員\"}]}";

        ObjectMapper mapper = new ObjectMapper();
        JsonNode jsonNode = mapper.readTree(json);

        String userName = jsonNode.get("userName").asText();
        System.out.println(userName);
    }

    /** * [{"roleName":"系統管理員"},{"roleName":"普通管理員"}] * @throws JsonProcessingException */
    @Test
    void list2Json() throws JsonProcessingException {
        Role role1 = new Role("系統管理員");
        Role role2 = new Role("普通管理員");

        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(Arrays.asList(role1, role2));

        System.out.println(json);
    }

    /** * 須要無參構造方法 * [Role(roleName=系統管理員), Role(roleName=普通管理員)] * @throws JsonProcessingException */
    @Test
    void json2List() throws JsonProcessingException {
        String json = "[{\"roleName\":\"系統管理員\"},{\"roleName\":\"普通管理員\"}]";

        ObjectMapper mapper = new ObjectMapper();
        List<Role> roles = mapper.readValue(json, new TypeReference<List<Role>>() {
        });

        System.out.println(roles);
    }
}
複製代碼

最後

本文到此結束,感謝閱讀。若是您以爲不錯,請關注公衆號【當我趕上你】,您的支持是我寫做的最大動力。

相關文章
相關標籤/搜索