• 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;
            
        }
    }
  • 相关阅读:
    Java运行时内存
    java --对象流与对象的序列化
    Java 文件操作
    爬虫
    eclipse项目放到github
    越来越玄的JAVA
    map和set的遍历
    集合总览
    unsafe类
    狡诈的java并发容器
  • 原文地址:https://www.cnblogs.com/Michael2397/p/7764734.html
Copyright © 2020-2023  润新知