Class JSONEncoder

java.lang.Object
com.smartgwt.client.core.BaseClass
com.smartgwt.client.util.JSONEncoder
All Implemented Interfaces:
HasHandlers

public class JSONEncoder extends BaseClass
Class for encoding objects as JSON strings.
  • Constructor Details

    • JSONEncoder

      public JSONEncoder()
    • JSONEncoder

      public JSONEncoder(JavaScriptObject jsObj)
  • Method Details

    • getOrCreateRef

      public static JSONEncoder getOrCreateRef(JavaScriptObject jsObj)
    • setJavaScriptObject

      public void setJavaScriptObject(JavaScriptObject jsObj)
      Overrides:
      setJavaScriptObject in class BaseClass
    • create

      public JavaScriptObject create()
      Specified by:
      create in class BaseClass
    • isCreated

      public boolean isCreated()
      Overrides:
      isCreated in class BaseClass
    • getJsObj

      public JavaScriptObject getJsObj()
      Overrides:
      getJsObj in class BaseClass
    • getOrCreateJsObj

      public JavaScriptObject getOrCreateJsObj()
      Overrides:
      getOrCreateJsObj in class BaseClass
    • setCircularReferenceMarker

      public JSONEncoder setCircularReferenceMarker(String circularReferenceMarker) throws IllegalStateException
      The string marker used to represent circular references. See circularReferenceMode.
      Parameters:
      circularReferenceMarker - New circularReferenceMarker value. Default value is "$$BACKREF$$"
      Returns:
      JSONEncoder instance, for chaining setter calls
      Throws:
      IllegalStateException - this property cannot be changed after the underlying component has been created
    • getCircularReferenceMarker

      public String getCircularReferenceMarker()
      The string marker used to represent circular references. See circularReferenceMode.
      Returns:
      Current circularReferenceMarker value. Default value is "$$BACKREF$$"
    • setCircularReferenceMode

      public JSONEncoder setCircularReferenceMode(JSONCircularReferenceMode circularReferenceMode) throws IllegalStateException
      What the JSONEncoder should do if it encounters a circular reference.
      Parameters:
      circularReferenceMode - New circularReferenceMode value. Default value is "path"
      Returns:
      JSONEncoder instance, for chaining setter calls
      Throws:
      IllegalStateException - this property cannot be changed after the underlying component has been created
    • getCircularReferenceMode

      public JSONCircularReferenceMode getCircularReferenceMode()
      What the JSONEncoder should do if it encounters a circular reference.
      Returns:
      Current circularReferenceMode value. Default value is "path"
    • setDateFormat

      public JSONEncoder setDateFormat(JSONDateFormat dateFormat) throws IllegalStateException
      Format for encoding JavaScript Date values in JSON. See JSONDateFormat for valid options, or override encodeDate() to do something custom.
      Parameters:
      dateFormat - New dateFormat value. Default value is "xmlSchema"
      Returns:
      JSONEncoder instance, for chaining setter calls
      Throws:
      IllegalStateException - this property cannot be changed after the underlying component has been created
    • getDateFormat

      public JSONDateFormat getDateFormat()
      Format for encoding JavaScript Date values in JSON. See JSONDateFormat for valid options, or override encodeDate() to do something custom.
      Returns:
      Current dateFormat value. Default value is "xmlSchema"
    • setEscapeNonPrintable

      public JSONEncoder setEscapeNonPrintable(Boolean escapeNonPrintable)
      By default, obscure non-printable characters such as DC3 (Device Control 3, U+0013 hexadecimal) will be escaped according to JSON standards. ECMA-404 / The JSON Data Interchange Format requires the quotation mark (U+0022), reverse solidus (U+005C), and control characters (U+0000 through U+001F) to be escaped.

      These characters are very rarely used in JSON data in web applications. If you know that your application does not use such characters in JSON data, there can be a performance advantage to setting escapeNonPrintable to false in order to disable the logic for escaping these characters. This is a detectable difference only when dealing with very large JSON structures on older browsers that do not provide native support (for example, Internet Explorer 8).

      Parameters:
      escapeNonPrintable - New escapeNonPrintable value. Default value is true
      Returns:
      JSONEncoder instance, for chaining setter calls
    • getEscapeNonPrintable

      public Boolean getEscapeNonPrintable()
      By default, obscure non-printable characters such as DC3 (Device Control 3, U+0013 hexadecimal) will be escaped according to JSON standards. ECMA-404 / The JSON Data Interchange Format requires the quotation mark (U+0022), reverse solidus (U+005C), and control characters (U+0000 through U+001F) to be escaped.

      These characters are very rarely used in JSON data in web applications. If you know that your application does not use such characters in JSON data, there can be a performance advantage to setting escapeNonPrintable to false in order to disable the logic for escaping these characters. This is a detectable difference only when dealing with very large JSON structures on older browsers that do not provide native support (for example, Internet Explorer 8).

      Returns:
      Current escapeNonPrintable value. Default value is true
    • setPrettyPrint

      public JSONEncoder setPrettyPrint(Boolean prettyPrint) throws IllegalStateException
      Whether to add indentation to the returned JSON string. This makes the returned JSON much easier to read but adds size. Note that when delivering JSON responses compressed, the size difference between prettyPrinted JSON and normal JSON is negligible.
      Parameters:
      prettyPrint - New prettyPrint value. Default value is true
      Returns:
      JSONEncoder instance, for chaining setter calls
      Throws:
      IllegalStateException - this property cannot be changed after the underlying component has been created
    • getPrettyPrint

      public Boolean getPrettyPrint()
      Whether to add indentation to the returned JSON string. This makes the returned JSON much easier to read but adds size. Note that when delivering JSON responses compressed, the size difference between prettyPrinted JSON and normal JSON is negligible.
      Returns:
      Current prettyPrint value. Default value is true
    • setSerializeInstances

      public JSONEncoder setSerializeInstances(JSONInstanceSerializationMode serializeInstances) throws IllegalStateException
      Controls the output of the JSONEncoder when instances of Smart GWT classes (eg a ListGrid) are included in the data to be serialized. See JSONInstanceSerializationMode.

      Note that the JSONEncoder does not support a format that will recreate the instance if passed to decode() or eval().

      Parameters:
      serializeInstances - New serializeInstances value. Default value is "long"
      Returns:
      JSONEncoder instance, for chaining setter calls
      Throws:
      IllegalStateException - this property cannot be changed after the underlying component has been created
    • getSerializeInstances

      public JSONInstanceSerializationMode getSerializeInstances()
      Controls the output of the JSONEncoder when instances of Smart GWT classes (eg a ListGrid) are included in the data to be serialized. See JSONInstanceSerializationMode.

      Note that the JSONEncoder does not support a format that will recreate the instance if passed to decode() or eval().

      Returns:
      Current serializeInstances value. Default value is "long"
    • setShowDebugOutput

      public JSONEncoder setShowDebugOutput(Boolean showDebugOutput) throws IllegalStateException
      If objects that cannot be serialized to JSON are encountered during serialization, show a placeholder rather than just omitting them.

      The resulting String will not be valid JSON and so cannot be decoded/eval()'d

      Parameters:
      showDebugOutput - New showDebugOutput value. Default value is false
      Returns:
      JSONEncoder instance, for chaining setter calls
      Throws:
      IllegalStateException - this property cannot be changed after the underlying component has been created
    • getShowDebugOutput

      public Boolean getShowDebugOutput()
      If objects that cannot be serialized to JSON are encountered during serialization, show a placeholder rather than just omitting them.

      The resulting String will not be valid JSON and so cannot be decoded/eval()'d

      Returns:
      Current showDebugOutput value. Default value is false
    • setSkipInternalProperties

      public JSONEncoder setSkipInternalProperties(Boolean skipInternalProperties) throws IllegalStateException
      If true, don't show Smart GWT internal properties when encoding an object.
      Parameters:
      skipInternalProperties - New skipInternalProperties value. Default value is false
      Returns:
      JSONEncoder instance, for chaining setter calls
      Throws:
      IllegalStateException - this property cannot be changed after the underlying component has been created
    • getSkipInternalProperties

      public Boolean getSkipInternalProperties()
      If true, don't show Smart GWT internal properties when encoding an object.
      Returns:
      Current skipInternalProperties value. Default value is false
    • setSkipNullValues

      public JSONEncoder setSkipNullValues(Boolean skipNullValues) throws IllegalStateException
      If true, don't include properties with null values when encoding an object.
      Parameters:
      skipNullValues - New skipNullValues value. Default value is false
      Returns:
      JSONEncoder instance, for chaining setter calls
      Throws:
      IllegalStateException - this property cannot be changed after the underlying component has been created
    • getSkipNullValues

      public Boolean getSkipNullValues()
      If true, don't include properties with null values when encoding an object.
      Returns:
      Current skipNullValues value. Default value is false
    • setStrictQuoting

      public JSONEncoder setStrictQuoting(Boolean strictQuoting) throws IllegalStateException
      Whether all property names should be quoted, or only those property names that are not valid identifiers or are JavaScript reserved words (such as "true").

      Encoding only where required produces slightly shorter, more readable output which is still compatible with JavaScript's eval():

        {
            someProp : "someValue",
            "true" : "otherValue",
            otherProp : "otherValue"
        }
        
      .. but is not understood by many server-side JSON parser implementations.
      Parameters:
      strictQuoting - New strictQuoting value. Default value is true
      Returns:
      JSONEncoder instance, for chaining setter calls
      Throws:
      IllegalStateException - this property cannot be changed after the underlying component has been created
    • getStrictQuoting

      public Boolean getStrictQuoting()
      Whether all property names should be quoted, or only those property names that are not valid identifiers or are JavaScript reserved words (such as "true").

      Encoding only where required produces slightly shorter, more readable output which is still compatible with JavaScript's eval():

        {
            someProp : "someValue",
            "true" : "otherValue",
            otherProp : "otherValue"
        }
        
      .. but is not understood by many server-side JSON parser implementations.
      Returns:
      Current strictQuoting value. Default value is true
    • encodeDate

      public String encodeDate(Date theDate)
      Encode a JavaScript Date value.

      By default, follows the dateFormat setting. To override the date format, all Dates should be converted to Strings beforehand.

      Parameters:
      theDate - JavaScript date object to be serialized
      Returns:
      value to be included in result. If this value is intended to appear as a String it should include quotes (")
    • encode

      public String encode(Object object)
      Serialize an object as a JSON string.

      Because GWT does not support Java reflection, JSON encoding cannot discover the properties of an arbitrary Java POJO. The following objects are supported:

      • any primitive type (String, Date, Number, Boolean)
      • any Map or Collection in any level of nesting
      • DataClass (Record's superclass) and RecordList
      • any widget (see +link{JSONEncoder.serializeInstances})
      • JavaScriptObject
      • an Array containing any of the above

      Note that using the String produced by this API with JSON.decode will not successfully preserve dates. Use JSONEncoder.setDateFormat "dateConstructor" to have dates round-trip properly.

      Parameters:
      object - object to serialize
      Returns:
      object encoded as a JSON String
    • encode

      public String encode(DataClass object)
      Serialize an object as a JSON string.

      Because GWT does not support Java reflection, JSON encoding cannot discover the properties of an arbitrary Java POJO. The following objects are supported:

      • any primitive type (String, Date, Number, Boolean)
      • any Map or Collection in any level of nesting
      • DataClass (Record's superclass) and RecordList
      • any widget (see +link{JSONEncoder.serializeInstances})
      • JavaScriptObject
      • an Array containing any of the above

      Note that using the String produced by this API with JSON.decode will not successfully preserve dates. Use JSONEncoder.setDateFormat "dateConstructor" to have dates round-trip properly.

      Parameters:
      object - object to serialize
      Returns:
      object encoded as a JSON String
    • encode

      public String encode(BaseClass object)
      Serialize an object as a JSON string.

      Because GWT does not support Java reflection, JSON encoding cannot discover the properties of an arbitrary Java POJO. The following objects are supported:

      • any primitive type (String, Date, Number, Boolean)
      • any Map or Collection in any level of nesting
      • DataClass (Record's superclass) and RecordList
      • any widget (see +link{JSONEncoder.serializeInstances})
      • JavaScriptObject
      • an Array containing any of the above

      Note that using the String produced by this API with JSON.decode will not successfully preserve dates. Use JSONEncoder.setDateFormat "dateConstructor" to have dates round-trip properly.

      Parameters:
      object - object to serialize
      Returns:
      object encoded as a JSON String
    • decode

      public static JavaScriptObject decode(String stringToJs)
      Convert the passed string as Javascript
      Parameters:
      stringToJs - the string to convert
      Returns:
      the JavaScriptObject upon evaluation