使用objectMapper.readValue 处理接口返回的JSON格式数据

记录一波处理方案

首先看下返回的数据格式,如下:

"items":"[{\"content\":\"\清\洁\,\门\窗\完\好\,\照\明\正\常\",\"itemType\":\"1\",\"text\":\"1\",\"title\":\"\机\房\、\滑\轮\间\环\境\",\"value\":\"BYX0101\"},{\"content\":\"\齐\全\,\在\指\定\位\置\",\"itemType\":\"1\",\"text\":\"1\",\"title\":\"\手\动\紧\急\操\作\装\置\",\"value\":\"BYX0102\"},{\"content\":\"\运\行\时\无\异\常\振\动\和\异\常\声\响\",\"itemType\":\"1\",\"text\":\"1\",\"title\":\"\驱\动\主\机\",\"value\":\"BYX0103\"},{\"content\":\"\动\作\灵\活\",\"itemType\":\"1\",\"text\":\"0\",\"title\":\"\制\动\器\各\销\轴\部\位\",\"value\":\"BYX0104\"},{\"content\":\"\打\开\时\制\动\衬\与\制\动\轮\不\应\发\生\摩\擦\,\间\隙\值\符\合\制\造\单\位\要\求\",\"itemType\":\"1\",\"text\":\"0\",\"title\":\"\制\动\器\间\隙\",\"value\":\"BYX0105\"},{\"content\":\"\制\动\力\人\工\方\式\检\测\符\合\使\用\维\护\说\明\书\要\求\;\制\动\力\自\监\测\系\统\有\记\录\",\"itemType\":\"1\",\"text\":\"0\",\"title\":\"\制\动\器\作\为\轿\厢\意\外\移\动\保\护\装\置\制\停\子\系\统\时\的\自\监\测\",\"value\":\"BYX0106\"}]",

 由于字段过长,无法直接存表,需要处理一下,也方便之后使用

处理方法如下,亲测可用

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Map;

/**
 * @author : liuf
 * @version V1.0
 * @title: JacksonUtil
 * @date 2020年07月07日 13:40
 **/
@Slf4j
public class JacksonUtil {

    private static ObjectMapper objectMapper = new ObjectMapper();
    private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

    static {
        // 对象的所有字段全部列入
        objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
        // 取消默认转换timestamps形式
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        // 忽略空bean转json的错误
        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        // 统一日期格式
        objectMapper.setDateFormat(new SimpleDateFormat(DATE_FORMAT));
        // 忽略在json字符串中存在, 但在java对象中不存在对应属性的情况, 防止错误
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }

    public static <T> String objToStr(T obj) {
        if (null == obj) {
            return null;
        }

        try {
            return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);
        } catch (Exception e) {
            log.warn("objToStr error: ", e);
            return null;
        }
    }

    public static <T> T strToObj(String str, Class<T> clazz) {
        if (StringUtils.isBlank(str) || null == clazz) {
            return null;
        }

        try {
            return clazz.equals(String.class) ? (T) str : objectMapper.readValue(str, clazz);
        } catch (Exception e) {
            log.warn("strToObj error: ", e);
            return null;
        }
    }

    public static <T> T strToObj(String str, TypeReference<T> typeReference) {
        if (StringUtils.isBlank(str) || null == typeReference) {
            return null;
        }

        try {
            return (T) (typeReference.getType().equals(String.class) ? str : objectMapper.readValue(str, typeReference));
        } catch (Exception e) {
            log.error("strToObj error", e);
            return null;
        }
    }
    
    public static void main(String[] args) {
        String string = "[{\"content\":\"\\u6e05\\u6d01\\uff0c\\u95e8\\u7a97\\u5b8c\\u597d\\uff0c\\u7167\\u660e\\u6b63\\u5e38\",\"itemType\":\"1\",\"text\":\"1\",\"title\":\"\\u673a\\u623f\\u3001\\u6ed1\\u8f6e\\u95f4\\u73af\\u5883\",\"value\":\"BYX0101\"},\n" +
                "{\"content\":\"\\u9f50\\u5168\\uff0c\\u5728\\u6307\\u5b9a\\u4f4d\\u7f6e\",\"itemType\":\"1\",\"text\":\"1\",\"title\":\"\\u624b\\u52a8\\u7d27\\u6025\\u64cd\\u4f5c\\u88c5\\u7f6e\",\"value\":\"BYX0102\"},\n" +
                "{\"content\":\"\\u8fd0\\u884c\\u65f6\\u65e0\\u5f02\\u5e38\\u632f\\u52a8\\u548c\\u5f02\\u5e38\\u58f0\\u54cd\",\"itemType\":\"1\",\"text\":\"1\",\"title\":\"\\u9a71\\u52a8\\u4e3b\\u673a\",\"value\":\"BYX0103\"},\n" +
                "{\"content\":\"\\u52a8\\u4f5c\\u7075\\u6d3b\",\"itemType\":\"1\",\"text\":\"0\",\"title\":\"\\u5236\\u52a8\\u5668\\u5404\\u9500\\u8f74\\u90e8\\u4f4d\",\"value\":\"BYX0104\"}]";

        ArrayList<Map<String,Object>> list = strToObj(string, ArrayList.class);
        System.out.println(list.size());
        for(Map map : list){
            System.out.println(map);
            System.out.println(map.get("content"));
        }
    }
}

控制台输出

{content=清洁,门窗完好,照明正常, itemType=1, text=1, title=机房、滑轮间环境, value=BYX0101}
清洁,门窗完好,照明正常
1
1
机房、滑轮间环境
BYX0101

到此值都可以取出 

 

 

 如有不足和错误,请指出,非常感谢

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值