Golang : How to convert strange string to JSON with json.MarshalIndent
Problem:
Your database is spewing out a funny looking string that looks like this {"width";800;"height";450}
and you want to map that string into something like this
[
{
width: 800,
height: 450,
}
]
You've tried converting the string to byte and decode with json.Unmarshal without luck. Is there a way to convert the string?
Solution:
First, clean up the funny/strange
string into something sensible with strings.Replace()
function and then format it to JSON with json.MarshalIndent()
function. json.MarshalIndent()
is to pretty-print the JSON output to multiple lines instead of lumping everything into a single line.
Here you go!
package main
import (
"encoding/json"
"fmt"
"os"
"strings"
)
func main() {
strFromDB := `{"width";800;"height";450}`
// deal with ;
// change ; to : after "
dealtWith := strings.Replace(strFromDB, "\";", "\":", -1)
fmt.Println("Converted to : ", dealtWith)
// trim and split
noCurlyBraces := strings.Replace(dealtWith, "{", "", -1)
noCurlyBraces = strings.Replace(noCurlyBraces, "}", "", -1)
// turn to slice
strSliceWithQuote := strings.Split(noCurlyBraces, ";")
fmt.Println("Slice : ", strSliceWithQuote)
jsonWithQuote, err := json.MarshalIndent(strSliceWithQuote, "", " ")
if err != nil {
fmt.Println(err)
os.Exit(-1)
}
fmt.Println("JSON : \n",string(jsonWithQuote))
}
Output :
Converted to : {"width":800;"height":450}
Slice : ["width":800 "height":450]
JSON :
[
"\"width\":800",
"\"height\":450"
]
See also : Golang : How to convert JSON string to map and slice
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+17.5k Golang : [json: cannot unmarshal object into Go value of type]
+7.2k Golang : Fixing Gorilla mux http.FileServer() 404 problem
+7.4k Javascript : Push notifications to browser with Push.js
+8k Golang : Randomize letters from a string example
+15.4k Chrome : ERR_INSECURE_RESPONSE and allow Chrome browser to load insecure content
+4.9k Golang : Constant and variable names in native language
+8.1k Golang : Oanda bot with Telegram and RSI example
+4.8k Unix/Linux : secure copying between servers with SCP command examples
+5.9k PHP : Get client IP address
+6.9k Golang : Find the shortest line of text example
+22k Golang : Match strings by wildcard patterns with filepath.Match() function
+5.9k nginx : force all pages to be SSL