JSON封装单一的对象很简单。但:JSON序列化会以无穷举得方式将所有有关联的对象数据全部抓取。在实际过程中往往不能将这些关联的对象全部以{“对象”:null}的形式存进去,可以加入注解 @JSON(serialize=false) 将对象不抓取。如果要将一个对象不为null的对象全部抓取,而为null的不抓取,怎么实现。求个高手!

解决方案 »

  1.   

    你用的什么json库?json-lib在序列化的时候可以提供一个JsonConfig,里面可以提供PropertyFilter,自己写规则过滤就行了
      

  2.   

    我用的是json-lib-2.1.jar,能把操作写详细点吗?
      

  3.   

    查了一遍代码,发现这个config传进去了中间却被丢掉了,服了,我给你提供个修改json-lib的方法算了。。
    JSONObject的toString()方法,你找一下这段
             while( keys.hasNext() ){
                if( sb.length() > 1 ){
                   sb.append( ',' );
                }
                Object o = keys.next();
                sb.append( JSONUtils.quote( o.toString() ) );
                sb.append( ':' );
                sb.append( JSONUtils.valueToString( this.properties.get( o ) ) );
             }
    然后在循环里加判断吧
    简单点就直接在这里判断value是不是空,复杂点就把这一系列对象重载个toString(JsonConfig)的方法出来
    config的用法是这样
    JsonConfig config = new JsonConfig();
    config.setJavaPropertyFilter(new PropertyFilter() {
    public boolean apply(Object source, String name, Object value)
    {
    //返回true就被过滤掉,false就显示
    return true;
    }
    });
      

  4.   

    对,就是JsonConfig
    JsonConfig config = new JsonConfig();
    config.registerPropertyExclusions(xxxx.class, new String[] {
      "忽略的字段名"
    });