json与Java对象 转换的几种方法

package com.yoyohr.bi.bean;


import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import static mondrian.server.MondrianServerRegistry.logger;

/**
 * Created by Administrator on 2017/2/18.
 */
public class Test {
    private static String jsonUser ="{\"id\":1,\"name\":\"kexianqin\"}";
    private static String jsonUserArray ="[{\"id\":1,\"name\":\"kexianqin\"},{\"id\":2,\"name\":\"liuchen\"}]";

    private final static ObjectMapper objectMapper = new ObjectMapper();

    private static final Logger logger = LoggerFactory.getLogger(Test.class);

    public static void main(String[] args) throws IOException {

        logger.info("Test begin........");
         /**
         使用JavaType方法
          */
//        JavaType javaType = objectMapper.getTypeFactory().constructCollectionType(ArrayList.class,UserT.class);
//        List<UserT> userList = objectMapper.readValue(jsonUserArray,javaType);
//        System.out.println(userList);

        /**
         TypeReference:可以把json字符串转换成想要的List.
        注意readValue()方法里的new TypeReference<List<UserT>>() { }写法很关键,写成List.class是不行的,
         */
//         List<UserT> userlist = objectMapper.readValue(jsonUserArray,new TypeReference<List<UserT>>(){});// 若无toString方法:[com.yoyohr.bi.bean.UserT@58651fd0, com.yoyohr.bi.bean.UserT@4520ebad]
//         List userlist2 = objectMapper.readValue(jsonUserArray,new TypeReference<List>() { });// [{id=1, name=kexianqin}, {id=2, name=liuchen}]
//         System.out.println(userlist);
//         System.out.println(userlist2);

        /**
         最普通的
         */
//        UserT user=objectMapper.readValue(jsonUser,UserT.class);//json转化为UserT类对象
//        System.out.print(user.toString());
//        String jsonString=objectMapper.writeValueAsString(user);//对象转化为json
//        System.out.println(jsonString);


        /**
            类中含类,如cube中包含多个dimension,:{"users":[{"id":3,"name":"kxq"},{"id":4,"name":"lc"}],"dname":"体育经济Q1241"}
         */
//        UserT user1 = new UserT();
//        user1.setId(3);
//        user1.setName("kxq");
//
//        UserT user2 = new UserT();
//        user2.setId(4);
//        user2.setName("lc");
//
//        Department class1=new Department();
//        class1.setDname("体育经济Q1241");
//        List<UserT> listUser=new ArrayList();
//        listUser.add(user1); listUser.add(user2);
//        class1.setUsers(listUser);
//
//        String jsonString = objectMapper.writeValueAsString(class1);
//        System.out.println(jsonString);


        /**
         * 调用下面的方法<即最终方法>
         */
        System.out.println(decode(jsonUser,UserT.class));
        System.out.println(decode(jsonUserArray,new TypeReference<List<UserT>>(){}));//!!!!!!!!!!!!!{ }是干什么用的??  <T>与<?>
    }


    /**
     * 将对象序列化
     * @param obj
     * @return
     */
    public static String encode(Object obj) {
        try {
            return objectMapper.writeValueAsString(obj);
        } catch (JsonGenerationException e) {
            logger.error("encode(Object)", e); //$NON-NLS-1$
        } catch (JsonMappingException e) {
            logger.error("encode(Object)", e); //$NON-NLS-1$
        } catch (IOException e) {
            logger.error("encode(Object)", e); //$NON-NLS-1$
        }
        return null;
    }
    /**
     * 将json string反序列化成对象
     *
     * @param json
     * @param valueType
     * @return
     */
    public static <T> T decode(String json, Class<T> valueType ) {
        try {
            return objectMapper.readValue(json, valueType);
        } catch (JsonParseException e) {
            logger.error("decode(String, Department<T>)", e);
        } catch (JsonMappingException e) {
            logger.error("decode(String, Department<T>)", e);
        } catch (IOException e) {
            logger.error("decode(String, Department<T>)", e);
        }
        return null;
    }

    /**
     * 将json array反序列化为对象
     *
     * @param json
     * @param jsonTypeReference
     * @return
     */
    public static <T> T decode(String json, TypeReference<T> jsonTypeReference) {
        try {
            return (T) objectMapper.readValue(json, jsonTypeReference);
        } catch (JsonParseException e) {
            logger.error("decode(String, JsonTypeReference<T>)", e);
        } catch (JsonMappingException e) {
            logger.error("decode(String, JsonTypeReference<T>)", e);
        } catch (IOException e) {
            logger.error("decode(String, JsonTypeReference<T>)", e);
        }
        return null;
    }

}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值