属性别名,可为属性添加多个别名,如@JsonAlias({"username","user_name"})String name;,当json串中属性名为username、user_name、name都可以识别。
@JsonProperty用于属性,将属性的名称序列化时转换为另外一个名称,如@JsonProperty("username")String name;,当json串中属性名为username时才可以解析,无法识别name会报错。
2. ObjectMapper定义一个实体类User
@Data
public class User {
private Integer id;
@JsonAlias("username")
private String name;
}
2.1 Json字符串与对象之间的转换
单个对象
String jsonStr = "{"id": 24, "name": "程序员"}";
ObjectMapper objectMapper = new ObjectMapper();
//字符串转对象 -- User(id=24, name=程序员)
User user = objectMapper.readValue(jsonStr, User.class);
//对象转字符串 -- {"id":24,"name":"程序员"}
String s = objectMapper.writeValueAsString(user);
readValue()有许多重载方法,可以解析byte数组、文件、流、字符串等
多个对象
String jsonStr = "[{"id": 24, "name": "程序猿"},{"id": 25, "name": "程序媛"}]";
ObjectMapper objectMapper = new ObjectMapper();
//转对象数组 -- [User(id=24, name=程序猿), User(id=25, name=程序媛)]
User[] user = objectMapper.readValue(jsonStr, User[].class);
//对象转字符串 -- [{"id":24,"name":"程序猿"},{"id":25,"name":"程序媛"}]
String s = objectMapper.writeValueAsString(user);
//转对象集合 -- [{id=24, name=程序猿}, {id=25, name=程序媛}]
List arrayList = objectMapper.readValue(jsonStr, List.class);
2.2 Json字符串与Map的转换数组形式的字符串推荐使用对象数组,当然对象集合也是可以的。
string jsonStr = "{"id": 24, "name": "程序猿"}";
ObjectMapper objectMapper = new ObjectMapper();
//字符串转Map -- {id=24, name=程序猿}
Map map = objectMapper.readValue(jsonStr, Map.class);
//Map转字符串 -- {"id":24,"name":"程序猿"}
String s = objectMapper.writeValueAsString(map);
3. 树模型
获取JsonNode的方式:
- readValue(xx,Json.class)
- readTree(xx)
String jsonStr = "{"id": 24, "name": "程序猿"}";
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readValue(jsonStr, JsonNode.class);
System.out.println(jsonNode); //{"id":24,"name":"程序猿"}
JsonNode jsonNode1 = objectMapper.readTree(jsonStr);
System.out.println(jsonNode1); //{"id":24,"name":"程序猿"}
获取属性名与值:
String jsonStr = "{"id": 24, "name": "程序猿"}";
JsonNode jsonNode = objectMapper.readTree(jsonStr);
//迭代
Iterator stringIterator = jsonNode.fieldNames();
while (stringIterator.hasNext()){
String next = stringIterator.next();
//id name
System.out.println(next);
}
JsonNode id = jsonNode.get("id");
// 24
int errorCode = id.asInt();
JsonNode name = jsonNode.get("name");
// 程序猿
String s = name.asText();
如果是嵌套方式的json串:
String jsonStr = "{"id": 24, "name": "程序员","other": {"num": 54,"desc": "描述"}}";
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(jsonStr);
Iterator iterator = jsonNode.fieldNames();
while (iterator.hasNext()){
String next = iterator.next();
// id name other
System.out.println(next);
}
JsonNode other = jsonNode.get("other");
Iterator stringIterator = other.fieldNames();
while (stringIterator.hasNext()){
String next = stringIterator.next();
//num desc
System.out.println(next);
}
Object与JsonNode之间的转换
User user = new User(1,"程序员"); ObjectMapper objectMapper = new ObjectMapper(); // 对象转JsonNode JsonNode jsonNode = objectMapper.valueToTree(user); // JsonNode转对象 User user1 = objectMapper.treeToValue(jsonNode, User.class);



