使用jackson.jar进行对象与字符串的相互转换

注意事项:

①json字符串与对象互转时,对象必须实现序列化接口

②标准json中,要求键和值都要有双引号.(数值类型可以不需要双引号)

准备jar包

jackson-databind.jar

jackson-core.jar

jackson-annotations.jar

json与string互转的核心类ObjectMapper

JsonUtils.java

package pers.zwy.ls.util;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * @author Weiyu Zheng
 * @date 2019/8/19
 */
public class JsonUtils {

    //对象处理类
    private static final ObjectMapper MAPPER = new ObjectMapper();

    /**
     * 对象转json字符串
     * @param object
     * @param <T>
     * @return
     */
    public static <T> String objectToJson(T object){
        String jsonStr = null;
        try{
            jsonStr = MAPPER.writeValueAsString(object);
        }catch (Exception e){
            e.printStackTrace();
        }
        return jsonStr;
    }

    public static <T> T stringToObject(String jsonStr,Class<T> objClass){
        T object = null;
        try {
            //禁用bean不包含的属性,以免反序列化被打断:如:json中包含4个属性的键值对,但是bean中只有2个属性
            MAPPER.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
            object = MAPPER.readValue(jsonStr, objClass);
        }catch (Exception e){
            e.printStackTrace();
        }
        return object;
    }
}

测试类

package pers.zwy.ls.util;

import org.junit.Test;
import pers.zwy.ls.domain.Admin;

import static org.junit.Assert.*;

/**
 * @author Weiyu Zheng
 * @date 2019/8/19
 */
public class JsonUtilsTest {

    @Test
    public void objectToJson() {
        Admin a = new Admin();
        a.setId(10001000);
        a.setPassword("123456");
        String json = JsonUtils.objectToJson(a);
        System.out.println(json);//{"id":10001000,"password":"123456"}
    }

    @Test
    public void stringToObject() {
        String json = "{\"id\":1111,\"password\":\"2222\"}";
        Admin admin = JsonUtils.stringToObject(json,Admin.class);
        System.out.println(admin);//Admin{id=1111, password='2222'}
    }
}

ps:字符串转对象时,json数据必须使用双引号,如果是单引号会抛出异常

com.fasterxml.jackson.core.JsonParseException: Unexpected character (''' (code 39)): was expecting double-quote to start field name

 

jackson所需要的所有jar jackson-all-1.6.2.jar jackson-core-asl-1.6.2.jar jackson-mapper-asl-1.6.2.jar jakarta-oro.jar 1. 背景 目前维护的产品使用jackson处理json,现整理一下jackson相关资料,希望对初次接触jackson的新手有所帮助。 jackson主页: http://jackson.codehaus.org/ jackson document: http://wiki.fasterxml.com/JacksonJavaDocs JacksonInFiveMinutes: http://wiki.fasterxml.com/JacksonInFiveMinutes 本文主要内容译自JacksonInFiveMinutes,增加了部分示例,转载请注明出处。 受java平台上各种处理xml的类库(StAX, JAXB等)启发,Jackson提供一种处理json的java类库。Jackson的目标是为开发者提供快速、准确、轻量级和用起来最爽的json处理类库。本文将概括介绍Jackson的主要功能和相关功能的使用示例。 2. 使用方式 Jackson提供三种可选的json处理方式: 1) Streaming API 又称Incremental parsing/generation, 受StAX API启发,以非关联递增方式读写json内容。 通过 org.codehaus.jackson.JsonParser读取,通过org.codehaus.jackson.JsonGenerator写入。 2) Tree Model 通过基于内存的树形结构来描述json数据,和 XML DOM类似。通过org.codehaus.jackson.map.ObjectMapper构建树,树由JsonNode节点组成。 3) Data Binding 基于属性访问或注解的方式将json和POJO对象互相转换, 受JAXB基于注解的处理方式启发。通过org.codehaus.jackson.map.ObjectMapper读写json数据。它包含两种类型: 3.1 Simple Data Binding 用于json和Java Maps, Lists, Strings, Numbers, Booleans and nulls的相互转换。 3.2 Full Data Binding 用于json和Java Bean的相互转换。 下面从使用的角度上比较三种处理方式: Streaming API 执行效率最高,读写速度最快,另外两种方式都基于它实现; Tree Model 是最灵活的; Data Binding 通常是最方便使用的;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值