Jackson中的常见使用

Jackson中的常见使用

1. 常用注解

@JsonAlias

属性别名,可为属性添加多个别名,如@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<User> arrayList = objectMapper.readValue(jsonStr, List.class);

数组形式的字符串推荐使用对象数组,当然对象集合也是可以的。

2.2 Json字符串与Map的转换
string jsonStr = "{\"id\": 24, \"name\": \"程序猿\"}";
ObjectMapper objectMapper = new ObjectMapper();
//字符串转Map -- {id=24, name=程序猿}
Map<String,Object> 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<String> 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<String> iterator = jsonNode.fieldNames();
while (iterator.hasNext()){
    String next = iterator.next();
    // id   name   other
    System.out.println(next);
}
JsonNode other = jsonNode.get("other");
Iterator<String> 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);
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小辰~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值