sharp-common之JsonUtils

简介

Jackson是基于Java平台的一套数据处理工具,被称为”最好的Java Json解析器”。它可以使我们高效、简便的处理json字符串。

添加 pom 依赖

<dependency>
    <groupId>com.rick.common</groupId>
    <artifactId>sharp-common</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

对象转json字符串

public static String toJson(Object obj) throws IOException;
@Test
public void testToJson() throws IOException {
    Dept dept = new Dept();
    dept.setId(1L);
    dept.setName("Dev");
    dept.setParentId(2L);
    String json = JsonUtils.toJson(dept);
    System.out.println(json);
}

控制台输出

{"id":1,"name":"Dev","parentId":2}

json字符串转普通对象

public static <T> T toObject(String json, Class<T> clazz) throws IOException;

范型对象

@Test
public void testToPOJO() throws IOException {
    Dept dept = JsonUtils.toObject("{\"id\":1,\"name\":\"Dev\",\"parentId\":2}", Dept.class);
    Assert.assertEquals(1L, dept.getId().longValue());
}

Map对象

@Test
public void testToMap() throws IOException {
    Map dept = JsonUtils.toObject("{\"id\":1,\"name\":\"Dev\",\"parentId\":2}", Map.class);
    // dept.get("id") Integer类型
    Assert.assertEquals(1, dept.get("id"));
}

List对象

@Test
public void testToList() throws IOException {
    List list = JsonUtils.toObject("[{\"id\":1,\"name\":\"Dev\",\"parentId\":2}]", List.class);
    // dept.get("id") Integer类型
    Assert.assertEquals(1, ((Map)list.get(0)).get("id"));
}

json字符串转List

利用TypeReference,构造类型引用对象

@Test
public void testToListWithGenerics1() throws IOException {
    TypeReference<List<Dept>> typeRef = new TypeReference<List<Dept>>() {};
    List<Dept> list = JsonUtils.toObject("[{\"id\":1,\"name\":\"Dev\",\"parentId\":2}]", typeRef);
    Assert.assertEquals(1L, list.get(0).getId().longValue());
}

底层依赖利用JavaType实现

public static <T> List<T> toList(String json, Class<T> clazz) throws IOException;
@Test
public void testToListWithGenerics2() throws IOException {
    List<Dept> list = JsonUtils.toList("[{\"id\":1,\"name\":\"Dev\",\"parentId\":2}]", Dept.class);
    Assert.assertEquals(1L, list.get(0).getId().longValue());
}

json字符串转JsonNode

JsonNode后 ,操作对象比较转 Map List 对象更加的方便

public static JsonNode toJsonNode(String json) throws IOException;

list的Json字符串转JsonNode

@Test
public void testListStringToJsonNode() throws IOException {
    JsonNode jsonNode = JsonUtils.toJsonNode("[{\"id\":1,\"name\":\"Dev\",\"parentId\":2}]");
    Assert.assertEquals(1L, jsonNode.get(0).get("id").longValue());
}

对象的Json字符串转JsonNode

@Test
public void testObjectStringToJsonNode() throws IOException {
    JsonNode jsonNode = JsonUtils.toJsonNode("{\"id\":1,\"name\":\"Dev\",\"parentId\":2}");
    Assert.assertEquals(1L, jsonNode.get("id").longValue());
}

对象转JsonNode

@Test
public void testObjectToJsonNode() throws IOException {
    Dept dept = new Dept();
    dept.setId(1L);
    dept.setName("Dev");
    dept.setParentId(2L);
    JsonNode jsonNode = JsonUtils.toJsonNode(dept);
    Assert.assertEquals(1L, jsonNode.get("id").longValue());
}

Map转JsonNode

@Test
public void testMapToJsonNode() {
    String id = "1";
    Map<String, String> params = new HashMap<>();
    params.put("id", id);
    JsonNode jsonNode = JsonUtils.toJsonNode(params);
    Assert.assertEquals(1L, jsonNode.get("id").asLong());
}