code: def to_json(self, path=None, html_out=False,
                  html_path='vega_template.html', validate=False,
                  pretty_print=True):
          
          if validate:
              self.validate()
  
          if pretty_print:
              dumps_args = {'indent': 2, 'separators': (',', ': ')}
          else:
              dumps_args = {}
  
          def encoder(obj):
              if hasattr(obj, 'grammar'):
                  return obj.grammar
  
          if html_out:
              template = Template(
                  str(resource_string('vincent', 'vega_template.html')))
              with open(html_path, 'w') as f:
                  f.write(template.substitute(path=path))
  
          if path:
              with open(path, 'w') as f:
                  json.dump(self.grammar, f, default=encoder, sort_keys=True,
                            **dumps_args)
          else:
              return json.dumps(self.grammar, default=encoder, sort_keys=True,
                                **dumps_args)
docs: Convert object to JSON
  
          Parameters
          ----------
          path: string, default None
              Path to write JSON out. If there is no path provided, JSON
              will be returned as a string to the console.
          html_out: boolean, default False
              If True, vincent will output an simple HTML scaffold to
              visualize the vega json output.
          html_path: string, default 'vega_template.html'
              Path for the html file (if html_out=True)
          validate : boolean
              If True, call the object's `validate` method before
              serializing. Default is False.
          pretty_print : boolean
              If True (default), JSON is printed in more-readable form with
              indentation and spaces.
  
          Returns
          -------
          string
              JSON serialization of the class's grammar properties.