Package groovy.json

Class StreamingJsonBuilder.StreamingJsonDelegate

java.lang.Object
groovy.lang.GroovyObjectSupport
groovy.json.StreamingJsonBuilder.StreamingJsonDelegate
All Implemented Interfaces:
GroovyObject
Enclosing class:
StreamingJsonBuilder

public static class StreamingJsonBuilder.StreamingJsonDelegate extends GroovyObjectSupport
The delegate used when invoking closures
  • Field Details

    • writer

      protected final Writer writer
      Writer receiving the streamed JSON output.
    • first

      protected boolean first
      Indicates whether the next entry is the first one in the current context.
    • state

      protected groovy.json.StreamingJsonBuilder.StreamingJsonDelegate.State state
      Tracks whether the next token should be a JSON name or value.
  • Constructor Details

    • StreamingJsonDelegate

      public StreamingJsonDelegate(Writer w, boolean first)
      Creates a delegate backed by the default generator.
      Parameters:
      w - the writer receiving JSON output
      first - whether the next entry is the first entry
    • StreamingJsonDelegate

      public StreamingJsonDelegate(Writer w, boolean first, JsonGenerator generator)
      Creates a delegate backed by the supplied generator.
      Parameters:
      w - the writer receiving JSON output
      first - whether the next entry is the first entry
      generator - the generator used to serialize scalar values
  • Method Details

    • getWriter

      public Writer getWriter()
      Returns:
      Obtains the current writer
    • invokeMethod

      public Object invokeMethod(String name, Object args)
      Handles builder-style method calls for nested JSON output.
      Parameters:
      name - the JSON name being written
      args - the value, values, or closure associated with the name
      Returns:
      this delegate
    • call

      public void call(String name, List<Object> list) throws IOException
      Writes the name and a JSON array
      Parameters:
      name - The name of the JSON attribute
      list - The list representing the array
      Throws:
      IOException
    • call

      public void call(String name, Object... array) throws IOException
      Writes the name and a JSON array
      Parameters:
      name - The name of the JSON attribute
      array - The list representing the array
      Throws:
      IOException
    • call

      A collection and closure passed to a JSON builder will create a root JSON array applying the closure to each object in the collection

      Example:

       class Author {
            String name
       }
       def authorList = [new Author (name: "Guillaume"), new Author (name: "Jochen"), new Author (name: "Paul")]
      
       new StringWriter().with { w ->
           def json = new groovy.json.StreamingJsonBuilder(w)
           json.book {
              authors authorList, { Author author ->
               name author.name
             }
           }
      
           assert w.toString() == '{"book":{"authors":[{"name":"Guillaume"},{"name":"Jochen"},{"name":"Paul"}]}}'
       }
       
      Parameters:
      coll - a collection
      c - a closure used to convert the objects of coll
      Throws:
      IOException
    • call

      Throws:
      IOException
    • call

      public void call(String name, Object value) throws IOException
      Writes the name and value of a JSON attribute
      Parameters:
      name - The attribute name
      value - The value
      Throws:
      IOException
    • call

      public void call(String name, Object value, @DelegatesTo(value=StreamingJsonDelegate.class,strategy=1) Closure callable) throws IOException
      Writes the name and value of a JSON attribute
      Parameters:
      name - The attribute name
      value - The value
      Throws:
      IOException
    • call

      Writes the name and another JSON object
      Parameters:
      name - The attribute name
      value - The value
      Throws:
      IOException
    • call

      public void call(String name, JsonOutput.JsonUnescaped json) throws IOException
      Writes an unescaped value. Note: can cause invalid JSON if passed JSON is invalid
      Parameters:
      name - The attribute name
      json - The value
      Throws:
      IOException
    • call

      public void call(String name, Writable json) throws IOException
      Writes the given Writable as the value of the given attribute name
      Parameters:
      name - The attribute name
      json - The writable value
      Throws:
      IOException
    • verifyValue

      protected void verifyValue()
      Verifies that the current output state expects a JSON value next.
    • writeName

      protected void writeName(String name) throws IOException
      Writes a JSON name and the following colon separator.
      Parameters:
      name - the JSON name to write
      Throws:
      IOException - if writing fails
    • writeValue

      protected void writeValue(Object value) throws IOException
      Writes a scalar JSON value.
      Parameters:
      value - the value to write
      Throws:
      IOException - if writing fails
    • writeArray

      protected void writeArray(List<Object> list) throws IOException
      Writes a JSON array value.
      Parameters:
      list - the list to serialize
      Throws:
      IOException - if writing fails
    • isCollectionWithClosure

      public static boolean isCollectionWithClosure(Object[] args)
      Indicates whether the supplied arguments represent a collection and closure pair.
      Parameters:
      args - the arguments to inspect
      Returns:
      true if the arguments are a collection plus closure pair
    • writeCollectionWithClosure

      public static Object writeCollectionWithClosure(Writer writer, Collection coll, @DelegatesTo(value=StreamingJsonDelegate.class,strategy=1) Closure closure) throws IOException
      Writes a JSON array by applying a closure to each element in the collection.
      Parameters:
      writer - the destination writer
      coll - the collection to serialize
      closure - the closure used to build each JSON object entry
      Returns:
      the supplied writer
      Throws:
      IOException - if writing fails
    • cloneDelegateAndGetContent

      public static void cloneDelegateAndGetContent(Writer w, @DelegatesTo(value=StreamingJsonDelegate.class,strategy=1) Closure c)
      Clones a closure, assigns this delegate model, and writes its JSON content.
      Parameters:
      w - the destination writer
      c - the closure describing the JSON object
    • cloneDelegateAndGetContent

      public static void cloneDelegateAndGetContent(Writer w, @DelegatesTo(value=StreamingJsonDelegate.class,strategy=1) Closure c, boolean first)
      Clones a closure, assigns this delegate model, and writes its JSON content.
      Parameters:
      w - the destination writer
      c - the closure describing the JSON object
      first - whether the next entry is the first entry
    • curryDelegateAndGetContent

      public static void curryDelegateAndGetContent(Writer w, @DelegatesTo(value=StreamingJsonDelegate.class,strategy=1) Closure c, Object o)
      Curries an object into a closure, assigns this delegate model, and writes its JSON content.
      Parameters:
      w - the destination writer
      c - the closure describing the JSON object
      o - the object to curry into the closure
    • curryDelegateAndGetContent

      public static void curryDelegateAndGetContent(Writer w, @DelegatesTo(value=StreamingJsonDelegate.class,strategy=1) Closure c, Object o, boolean first)
      Curries an object into a closure, assigns this delegate model, and writes its JSON content.
      Parameters:
      w - the destination writer
      c - the closure describing the JSON object
      o - the object to curry into the closure
      first - whether the next entry is the first entry