Jackson在以前的工作中都没用到过,这次机缘巧合之下使用了Jackson,就记录一下使用的过程,方便日后查看。
这次的需求很简单,就是将一段json进行处理,获得中间的数据,以往都是会直接使用com.alibaba.fastjson.JSONObject下面的JSON.parseObject()发法,但是这次看了一下项目中的pom.xml,只有jackson的以下三个依赖的jar包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.10.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.10</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.10</version>
</dependency>
确定了使用Jackson以后就要考虑怎么处理这段json,因为有些字段设计到业务场景,所以就用abc代替了,也方便
{
"RetCd": "0",
"RetMsg": "成功",
"UserInfStrct": {
"number": 123,
"phone": "456",
"NotesUserGrpArry": [{
"a": "1",
"b": "2",
"c": "3"
},
{
"a": "4",
"b": "5",
"c": "6"
}
]
}
}
难点在于两点:
1、很多字段的命名没有遵循驼峰命名法,但是Jackson处理是会按照驼峰来处理的,所以需要多处理一步;
2、中间有一个数组,所以只使用一个对象就不太够
解决方案其实也不难:
1、使用@JsonProperty注解,具体的使用方法可以参考一下后面创建的实体类中的使用;
2、将数组中的abc再创建一个对象就完事了
所以,我创建了两个对象,首先是数组对象entity.java
package com.xhc.kuangstudyspringbootpro;
/**
* @author :haoc.xu
* @date :2021/8/3 15:19
* @Description:
*/
public class entity {
private String a;
private String b;
private String c;
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public String getC() {
return c;
}
public void setC(String c) {
this.c = c;
}
@Override
public String toString() {
return "entity{" +
"a='" + a + '\'' +
", b='" + b + '\'' +
", c='" + c + '\'' +
'}';
}
}
然后是整个的对象exampleEntity.java,因为json中的RetCd和RetMsg很容易就get出来了,所以就不写在里面了
说实话,因为是写个小例子,所以命名其实是很不规范的,真正的开发中还是应该做到见名知意。
package com.xhc.kuangstudyspringbootpro;
import com.fasterxml.jackson.annotation.*;
import java.util.List;
/**
* @author :haoc.xu
* @date :2021/8/3 14:45
* @Description:
*/
public class exampleEntity {
private String number;
@JsonProperty(value = "NotesUserGrpArry")
private List<entity> notesUserGrpArry;
private String phone;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public List<entity> getNotesUserGrpArry() {
return notesUserGrpArry;
}
public void setNotesUserGrpArry(List<entity> notesUserGrpArry) {
this.notesUserGrpArry = notesUserGrpArry;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "exampleEntity{" +
"number='" + number + '\'' +
", notesUserGrpArry=" + notesUserGrpArry +
", phone='" + phone + '\'' +
'}';
}
}
PS:

没有这个注释,这一步转化,妥妥报错,亲测!!!!
接下来就是对json进行处理了,同样为了偷懒,我直接把json复制到了代码里面
package com.xhc.kuangstudyspringbootpro;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.json.JSONObject;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author :haoc.xu
* @date :2021/8/3 14:06
* @Description:
*/
@RequestMapping(value = "/jsonTset",produces = "application/json;charset=utf-8")
public class jsonTset {
public static void main(String[] args) throws Exception {
String json = "{\n" +
"\t\"RetCd\": \"0\",\n" +
"\t\"RetMsg\": \"成功\",\n" +
"\t\"UserInfStrct\": {\n" +
"\t\t\"number\": 123,\n" +
"\t\t\"phone\": \"456\",\n" +
"\t\t\"NotesUserGrpArry\": [{\n" +
"\t\t\t\t\"a\": \"1\",\n" +
"\t\t\t\t\"b\": \"2\",\n" +
"\t\t\t\t\"c\": \"3\"\n" +
"\t\t\t},\n" +
"\t\t\t{\n" +
"\t\t\t\t\"a\": \"4\",\n" +
"\t\t\t\t\"b\": \"5\",\n" +
"\t\t\t\t\"c\": \"6\"\n" +
"\t\t\t}\n" +
"\t\t]\n" +
"\t}\n" +
"} ";
JSONObject jsonObject = new JSONObject(json);
System.out.println(jsonObject);
String userInfStrct = jsonObject.get("UserInfStrct").toString();
System.out.println(userInfStrct);
ObjectMapper mapper = new ObjectMapper();
exampleEntity exampleEntity = mapper.readValue(userInfStrct, exampleEntity.class);
System.out.println(exampleEntity);
List<entity> notesUserGrpArry = exampleEntity.getNotesUserGrpArry();
for (entity entity : notesUserGrpArry) {
System.out.println("a="+entity.getA()+",b="+entity.getB()+",c="+entity.getC());
}
}
}
为了能更清楚的了解中间的过程,在除了使用debug模式之外,我还贴心的多加了几个sout
运行效果如下,可以清楚的看到,我们已经处理完了,后续对对象进行处理就很简单了,在此就不多做赘述了


本文介绍了如何使用Jackson库将JSON字符串转换为Java对象。在处理过程中,由于字段命名不遵循驼峰命名法以及存在数组,通过注解和创建额外的对象解决了这些问题。详细介绍了创建的entity和exampleEntity实体类,并提供了JSON处理的代码示例。
377





