做为 面向对象
开发的程序员,天天的业务代码会遇到大量的 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);
}
}
复制代码
本文到此结束,感谢阅读。若是您以为不错,请关注公众号【当我赶上你】,您的支持是我写做的最大动力。