java - 使用杰克逊解析 json
问题描述
我有一个包含另一个类对象的请求类。现在我想将嵌套的 JSON 解析为请求类对象。
我正在尝试使用ObjectMapper
但它抛出异常。请帮助我使用 java Jackson做到这一点。
{
"filters":[
{
"key":"CustomerId",
"op":"=",
"value" : "1"
},
{
"key":"userName",
"op":"=",
"value" : "admin"
}
],
"startIndex" : 1,
"size" : 10,
"OrderBy" :
{
"propertyId" : "userName",
"Desc" : false
},
"TimeRange" : {
"startTimestamp" : 1,
"endTimestamp" :10
}
}
逻辑:
public static class OrderBy {
private String propertyId;
private boolean desc = true;
}
class TimeRange {
private Long startTimestamp;
private Long endTimestamp;
}
class Filter {
private String propertyId;
private String op;
private Object value;
}
public class Request {
private List<Filter> filters;
private TimeRange timeRange;
private OrderBy orderBy;
private int startIndex = 0;
private int size = 20;
}
解决方案
我给你一个 Jaskson Util Tools 课程。
package com.jackson.utils;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* The class JacksonUtil
*
* json字符与对像转换
*
* @version: $Revision$ $Date$ $LastChangedBy$
*
*/
public final class JacksonUtil {
public static ObjectMapper objectMapper;
/**
* 使用泛型方法,把json字符串转换为相应的JavaBean对象。
* (1)转换为普通JavaBean:readValue(json,Student.class)
* (2)转换为List,如List<Student>,将第二个参数传递为Student
* [].class.然后使用Arrays.asList();方法把得到的数组转换为特定类型的List
*
* @param jsonStr
* @param valueType
* @return
*/
public static <T> T readValue(String jsonStr, Class<T> valueType) {
if (objectMapper == null) {
objectMapper = new ObjectMapper();
}
try {
return objectMapper.readValue(jsonStr, valueType);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* json数组转List
* @param jsonStr
* @param valueTypeRef
* @return
*/
public static <T> T readValue(String jsonStr, TypeReference<T> valueTypeRef){
if (objectMapper == null) {
objectMapper = new ObjectMapper();
}
try {
return objectMapper.readValue(jsonStr, valueTypeRef);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 把JavaBean转换为json字符串
*
* @param object
* @return
*/
public static String toJSon(Object object) {
if (objectMapper == null) {
objectMapper = new ObjectMapper();
}
try {
return objectMapper.writeValueAsString(object);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
现在,您可以使用隐藏代码来请求:
String userBeanToJson = "your json string";//please replace this for your need json
Request jsonToUserBean = JacksonUtil.readValue(userBeanToJson, Request.class);
希望它对你有用。
推荐阅读
- python - RuntimeError:堆栈期望每个张量大小相等
- javascript - React - 如何将 API 数据从一个组件传递到另一个 js 文件中的另一个组件?
- c++ - 从文件中读取块 (4kb) 时,C++ 需要花费大量时间。[标准::ios::二进制]
- cordova - 在 Ionic v1 项目/应用程序上升级 WKWebView 后的 XMLHttpRequest 错误
- javascript - 使用 HTML5 视频和 React 模糊视频背景
- c++ - MSVC 16.8.4 中 std::this_thread::sleep 的显着开销?
- swift - 从第二个初始化程序使用的 SwiftUI 泛型
- android - 带有 Jetpack 导航的底部导航菜单无法导航
- python - 在numpy中计算两个向量之间的成对差异?
- python - 用编码连接两个网站