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 }