8、技术分析fastJson使用

 

一、导入包

二、使用

package com.itheima.test;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.itheima.domain.Customer;

public class Demo1 {
    
    /**
     * 演示fastjson的简单的使用
     */
    @Test
    public void run1(){
        Customer c = new Customer();
        c.setCust_id(20L);
        c.setCust_name("测试");
        c.setCust_phone("120");
        
        // 转换成json的字符串
        String jsonString = JSON.toJSONString(c);
        System.out.println(jsonString);
    }
    
    @Test
    public void run2(){
        List<Customer> list = new ArrayList<Customer>();
        Customer c = new Customer();
        c.setCust_id(20L);
        c.setCust_name("测试");
        c.setCust_phone("120");
        list.add(c);
        
        Customer c2 = new Customer();
        c2.setCust_id(30L);
        c2.setCust_name("测试2");
        c2.setCust_phone("12000");
        list.add(c2);
        
        // 转换成json的字符串
        String jsonString = JSON.toJSONString(list);
        System.out.println(jsonString);
    }
    
    /**
     * 默认的情况下,fastjson禁止循环的引用
     */
    @Test
    public void run3(){
        List<Customer> list = new ArrayList<Customer>();
        Customer c = new Customer();
        c.setCust_id(20L);
        c.setCust_name("测试");
        c.setCust_phone("120");
        list.add(c);
        list.add(c);
        
        // 转换成json的字符串
        // String jsonString = JSON.toJSONString(list);
        
        // 禁止循环的引用
        String jsonString = JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect);
        System.out.println(jsonString);
    }
    
    /**
     * 死循环的问题
     */
    @Test
    public void run4(){
        Person p = new Person(); //person与role互相引用
        p.setPname("美美");
        Role r = new Role();
        r.setRname("管理员");
        p.setRole(r);
        r.setPerson(p);
        
        // 禁止循环的引用
        String jsonString = JSON.toJSONString(r,SerializerFeature.DisableCircularReferenceDetect);
        System.out.println(jsonString);
    }

}

三、对应的效果

1、

2、 

 

 3、

// 转换成json的字符串
        // String jsonString = JSON.toJSONString(list);

// 禁止循环的引用
        String jsonString = JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect);
        System.out.println(jsonString);

4、
因为3禁止循环引用产生的问题
解决:在person加注解

四、导入/crm/src/com/louis/utils/FastJsonUtil.java

package com.louis.utils;

import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;

public class FastJsonUtil {
    
    /**
     * 将对象转成json串
     * @param object
     * @return
     */
    public static String toJSONString(Object object){
        //DisableCircularReferenceDetect来禁止循环引用检测
        return JSON.toJSONString(object,SerializerFeature.DisableCircularReferenceDetect);
    }
    
    //输出json
    public static void write_json(HttpServletResponse response,String jsonString){
        response.setContentType("application/json;utf-8");
        response.setCharacterEncoding("UTF-8");
        try {
            response.getWriter().print(jsonString);
        } catch (IOException e) {
            e.printStackTrace();
        }    
    }
    
    /**
     * ajax提交后回调的json字符串
     * @return
     */
    public static String ajaxResult(boolean success,String message)
    {
        Map map=new HashMap();
        map.put("success", success);//是否成功
        map.put("message", message);//文本消息
        String json= JSON.toJSONString(map);        
        return json;
    }
    

    /**
     * JSON串自动加前缀
     * @param json 原json字符串
     * @param prefix 前缀
     * @return 加前缀后的字符串
     */

    public static String JsonFormatterAddPrefix(String json,String prefix,Map<String,Object> newmap)
    {
        if(newmap == null){
            newmap = new HashMap();
        }
        Map<String,Object> map = (Map) JSON.parse(json);

        for(String key:map.keySet())
        {
            Object object=map.get(key);
            if(isEntity(object)){
                String jsonString = JSON.toJSONString(object);
                JsonFormatterAddPrefix(jsonString,prefix+key+".",newmap);
                
            }else{
                newmap.put(prefix+key, object);
            }
            
        }
        return JSON.toJSONString(newmap);        
    }
    /**
     * 判断某对象是不是实体
     * @param object
     * @return
     */
    private static boolean isEntity(Object object)
    {
        if(object instanceof String  )
        {
            return false;
        }
        if(object instanceof Integer  )
        {
            return false;
        }
        if(object instanceof Long  )
        {
            return false;
        }
        if(object instanceof java.math.BigDecimal  )
        {
            return false;
        }
        if(object instanceof Date  )
        {
            return false;
        }
        if(object instanceof java.util.Collection )
        {
            return false;
        }
        return true;
        
    }
}

 

posted on 2017-11-01 08:31  Michael2397  阅读(251)  评论(0编辑  收藏  举报

导航