比较常用的是SpringBoot的Jackson、谷歌的Gson、阿里巴巴的Fastjson
Jackson的总结
JavaBean的使用
Company,公司
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Company {
private String companyName;
private List<WebSite> webSites;
}
WebSite,站点
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WebSite {private String webSiteName;
private List<User> users;}
User,用户
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String userId;
private String username;
private String password;
}
json字符串和对象互转
objectMapper.writeValueAsString()
/**
* 序列化:对象转json字符串,包含多个数组
*
*/
@Test
public void testObject2Json2() {
User user2 = new User("1","上海辟谣专属队","职业辟谣,不信谣,不传谣,呵呵");
List<User> users = new ArrayList<>();
users.add(user2);
WebSite webSite = new WebSite();
webSite.setWebSiteName("xxxxxx.com");
webSite.setUsers(users);List<WebSite> webSites = new ArrayList<>();
webSites.add(webSite);
Company company = new Company();
company.setCompanyName("yyyyyy");
company.setWebSites(webSites);ObjectMapper objectMapper = new ObjectMapper();
try {
String jsonString = objectMapper.writeValueAsString(company);
System.out.println(jsonString);
} catch (JsonProcessingException e) {
log.error("error: ", e);
}}
输出
{"companyName":"yyyyyy","webSites":[{"webSiteName":"xxxxxx.com","users":[{"userId":"1","username":"上海辟谣专属队","password":"职业辟谣,不信谣,不传谣,呵呵"}]}]}
json字符串转对象
@Test
public void testJson2Object() {String json = "{\"companyName\":\"yyyyyy\",\"webSites\":[" +
"{\"webSiteName\":\"xxxxxx.com\",\"users\":[{\"userId\":\"1\",\"username\":\"上海辟谣专属队\",\"password\":\"职业辟谣,不信谣,不传谣,呵呵\"}]}" +
"]}";
ObjectMapper objectMapper = new ObjectMapper();
try {
Company company = objectMapper.readValue(json, Company.class);
System.out.println(company.getWebSites().get(0).getUsers().get(0).getUsername());
} catch (JsonProcessingException e) {
log.error("error: ", e);
}
}
json数组字符串转数组对象
/**
* 反序列化:数组类型的json字符串转对象数组
*
*/
@Test
public void testJsonArrayString2ObjectArray() {
String json = "[" +
"{\"userId\":\"1\",\"username\":\"上海带刀沪卫\",\"password\":\"带刀大佬\"}" +
",{\"userId\":\"1\",\"username\":\"上海辟谣专属队\",\"password\":\"职业辟谣,不信谣,不传谣,呵呵\"}" +
"]";
ObjectMapper objectMapper = new ObjectMapper();
try {
TypeReference<List<User>> typeReference = new TypeReference<List<User>>() {
};
List<User> list = objectMapper.readValue(json, typeReference);
list.forEach(user -> {
System.out.println(user.getUsername());
});} catch (JsonProcessingException e) {
log.error("error: ", e);
}}
结果
上海带刀沪卫
上海辟谣专属队