Class JSONCodec


  • public class JSONCodec
    extends java.lang.Object
    This is a simple JSON Coder and Encoder that uses the Java type system to convert data objects to JSON and JSON to (type safe) Java objects. The conversion is very much driven by classes and their public fields. Generic information, when present is taken into account.

    Usage patterns to encode:
      JSONCoder codec = new JSONCodec(); // assert "1".equals(
     codec.enc().to().put(1).toString()); assert "[1,2,3]".equals(
     codec.enc().to().put(Arrays.asList(1,2,3).toString()); Map m = new HashMap();
     m.put("a", "A"); assert "{\"a\":\"A\"}".equals(
     codec.enc().to().put(m).toString()); static class D { public int a; } D d =
     new D(); d.a = 41; assert "{\"a\":41}".equals(
     codec.enc().to().put(d).toString());
     
    It is possible to redirect the encoder to another output (default is a string). See Encoder.to(),Encoder.to(File), Encoder.to(OutputStream), Encoder.to(Appendable). To reset the string output call Encoder.to().

    This Codec class can be used in a concurrent environment. The Decoders and Encoders, however, must only be used in a single thread.

    Will now use hex for encoding byte arrays

    • Constructor Detail

      • JSONCodec

        public JSONCodec()
    • Method Detail

      • enc

        public Encoder enc()
        Create a new Encoder with the state and appropriate API.
        Returns:
        an Encoder
      • dec

        public Decoder dec()
        Create a new Decoder with the state and appropriate API.
        Returns:
        a Decoder
      • encode

        void encode​(Encoder app,
                    java.lang.Object object,
                    java.lang.reflect.Type type,
                    java.util.Map<java.lang.Object,​java.lang.reflect.Type> visited)
             throws java.lang.Exception
        Throws:
        java.lang.Exception
      • getHandler

        Handler getHandler​(java.lang.reflect.Type type,
                           java.lang.Class<?> actual)
                    throws java.lang.Exception
        This method figures out which handler should handle the type specific stuff. It returns a handler for each type. If no appropriate handler exists, it will create one for the given type. There are actually quite a lot of handlers since Java is not very object oriented.
        Parameters:
        type -
        Returns:
        a Handler appropriate for type
        Throws:
        java.lang.Exception
      • decode

        java.lang.Object decode​(java.lang.reflect.Type type,
                                Decoder isr)
                         throws java.lang.Exception
        Throws:
        java.lang.Exception
      • parseString

        java.lang.String parseString​(Decoder r)
                              throws java.lang.Exception
        Throws:
        java.lang.Exception
      • hexDigit

        private int hexDigit​(int c)
                      throws java.io.EOFException
        Throws:
        java.io.EOFException
      • parseNumber

        private java.lang.Number parseNumber​(Decoder r)
                                      throws java.lang.Exception
        Throws:
        java.lang.Exception
      • parseArray

        void parseArray​(java.util.Collection<java.lang.Object> list,
                        java.lang.reflect.Type componentType,
                        Decoder r)
                 throws java.lang.Exception
        Throws:
        java.lang.Exception
      • getRawClass

        java.lang.Class<?> getRawClass​(java.lang.reflect.Type type)
      • setIgnorenull

        public JSONCodec setIgnorenull​(boolean ignorenull)
        Ignore null values in output and input
        Parameters:
        ignorenull -
        Returns:
        this
      • isIgnorenull

        public boolean isIgnorenull()
      • addHandler

        public JSONCodec addHandler​(java.lang.reflect.Type type,
                                    Handler handler)
        Add a new local handler