bitbucket.org/ai69/amoy@v0.2.3/json.go (about)

     1  package amoy
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"fmt"
     7  	"strings"
     8  )
     9  
    10  var (
    11  	emptyJSON = "{}"
    12  )
    13  
    14  // PrintJSON outputs data in JSON with indent to console.
    15  func PrintJSON(data interface{}) {
    16  	fmt.Println(convertJSON(data, 2))
    17  }
    18  
    19  // PrintOneLineJSON outputs data in JSON in one line.
    20  func PrintOneLineJSON(data interface{}) {
    21  	fmt.Println(convertJSON(data, 0))
    22  }
    23  
    24  // ToJSON returns JSON string of data with indent.
    25  func ToJSON(data interface{}) string {
    26  	return convertJSON(data, 2)
    27  }
    28  
    29  // ToOneLineJSON returns JSON string of data in one line.
    30  func ToOneLineJSON(data interface{}) string {
    31  	return convertJSON(data, 0)
    32  }
    33  
    34  func convertJSON(data interface{}, indent int) string {
    35  	var bf bytes.Buffer
    36  	enc := json.NewEncoder(&bf)
    37  	if indent > 0 {
    38  		enc.SetIndent("", strings.Repeat(" ", indent))
    39  	}
    40  	enc.SetEscapeHTML(false)
    41  
    42  	var res string
    43  	if err := enc.Encode(data); err != nil {
    44  		res = emptyJSON
    45  	} else {
    46  		res = strings.TrimSpace(bf.String())
    47  	}
    48  	return res
    49  }