impl custom json encode