美文网首页
fastjosn使用

fastjosn使用

作者: CoderHong | 来源:发表于2017-12-03 17:50 被阅读60次

导入jar包


fastjosn

编写测试类

对象转JSON

    /*  
     * 对象转JSON
     */
    @Test
    public void run1() {
        
        Person p = new Person();
        p.setNo(1);
        p.setName("Jake");
        p.setHeight(1.78);
        
        // 如果对于引用类型没有值 该属性不会参与转换
        String obj2json = JSON.toJSONString(p);
        System.out.println(obj2json);
        // 输出结果 {"height":1.78,"name":"jake","no":1}
    }

List 对象集合 转JSON

Person p = new Person();
        p.setNo(1);
        p.setName("Jake");
        p.setHeight(1.78);
        
        Person p2 = new Person();
        p2.setNo(2);
        p2.setName("rose");
        p2.setHeight(1.48);
        
        List<Person> list = new ArrayList<Person>();
        list.add(p);
        list.add(p2);
        // SerializerFeature.DisableCircularReferenceDetect 常量禁止循环引用
        // 解决集合中存在多个相同的Obj 输出结果中有引用 客户端无法解析
        String list2json = JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect);
        System.out.println(list2json);

解决由于使用了禁止循环引用引发的问题

场景:当一个list集合存放的对象,互相有个属性引用彼此解析会报错。


image.png
/*
     * 由于禁止了循环引用引发的新问题
     *      
     */
    @Test
    public void run4() {
        
        Person p = new Person();
        p.setNo(1);
        p.setName("Jake");
        p.setHeight(1.78);
        
        Role role = new Role();
        role.setRname("coderhong");
        
        // 循环引用
        role.setRperson(p);
        p.setpRole(role);
        
        List<Object> list = new ArrayList<Object>();
        list.add(p);
        list.add(role);
        // 禁止循环引用
        System.out.println(JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect));

解决方案。在一方加上注解@JSONField(serialize=false)

image.png

提供一个工具类:FastJsonUtils.java

/**
     * 将对象转成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) {
            // TODO Auto-generated catch block
            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;
        
    }
}

相关文章

网友评论

      本文标题:fastjosn使用

      本文链接:https://www.haomeiwen.com/subject/qotzbxtx.html