首页 > 解决方案 > 使用杰克逊解析 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;
        }

标签: javajson

解决方案


我给你一个 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);

希望它对你有用。


推荐阅读