code: func (g *Graph) JSON() []byte {
  
  	var buf *bytes.Buffer
  	buf = new(bytes.Buffer)
  
  	// Temporarily set root to something different than _
  	i := g.This
  	g.This = ""
  
  	g.json(buf)
  
  	// Restore root
  	g.This = i
  
  	return buf.Bytes()
  }
docs: // JSON produces JSON text from a Graph
  //
  // JSON has maps (objects, {}), lists (arrays, []) and values.
  //
  // Values can be strings, numbers, maps, lists, 'true', 'false' or 'null'
  //
  // map ::= '{' string ':' value [',' string : value]* '}'
  // list ::= '[' value [',' value]* ']'
  //
  // By definition, since maps and lists cannot be distinguished in OGDL, any list
  // should have a '_' root node.
  // Any non-leaf node is a map (unless is contains '_', obviously).
  //