github.com/GoogleCloudPlatform/terraformer@v0.8.18/terraformutils/json.go (about)

     1  package terraformutils
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"log"
     7  	"regexp"
     8  	"strings"
     9  )
    10  
    11  var OpeningBracketRegexp = regexp.MustCompile(`.?\\<`)
    12  var ClosingBracketRegexp = regexp.MustCompile(`.?\\>`)
    13  
    14  func jsonPrint(data interface{}) ([]byte, error) {
    15  	dataJSONBytes, err := json.MarshalIndent(data, "", "  ")
    16  	if err != nil {
    17  		log.Println(string(dataJSONBytes))
    18  		return []byte{}, fmt.Errorf("error marshalling terraform data to json: %v", err)
    19  	}
    20  	// We don't need to escape > or <
    21  	s := strings.ReplaceAll(string(dataJSONBytes), "\\u003c", "<")
    22  	s = OpeningBracketRegexp.ReplaceAllStringFunc(s, escapingBackslashReplacer("<"))
    23  	s = strings.ReplaceAll(s, "\\u003e", ">")
    24  	s = ClosingBracketRegexp.ReplaceAllStringFunc(s, escapingBackslashReplacer(">"))
    25  	return []byte(s), nil
    26  }
    27  
    28  func escapingBackslashReplacer(backslashedCharacter string) func(string) string {
    29  	return func(match string) string {
    30  		if strings.HasPrefix(match, "\\\\") {
    31  			return match // Don't replace regular backslashes
    32  		}
    33  		return strings.Replace(match, "\\"+backslashedCharacter, backslashedCharacter, 1)
    34  	}
    35  }