做爲 面向對象
開發的程序員,天天的業務代碼會遇到大量的 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;
}
}
複製代碼
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);
}
}
複製代碼
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);
}
}
複製代碼
單元測試
/** * @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);
}
}
複製代碼
本文到此結束,感謝閱讀。若是您以爲不錯,請關注公衆號【當我趕上你】,您的支持是我寫做的最大動力。